{"id":1121,"date":"2015-08-04T06:53:41","date_gmt":"2015-08-04T06:53:41","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=1121"},"modified":"2017-10-08T07:51:21","modified_gmt":"2017-10-08T07:51:21","slug":"users-index-with-angularjs","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/users-index-with-angularjs\/","title":{"rendered":"Ruby on Rails Tutorial users index with AngularJS"},"content":{"rendered":"<p><strong>1)Rails controller<\/strong><\/p>\r\n\r\n<p>$ vi app\/controllers\/users_controller.rb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nclass UsersController &lt; ApplicationController\r\n  before_action :signed_in_user, only: [:index, :update]\r\n\r\n  def index\r\n    @users = User.all\r\n    render json: @users\r\n  end<\/pre>\r\n\r\n<p><strong>2)AngularJS route<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/javascripts\/mymodule.js.erb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\n.when(&quot;\/users&quot;, {\r\n templateUrl: &quot;&lt;%= asset_path(&#39;users\/index.html.erb&#39;) %&gt;&quot;\r\n })<\/pre>\r\n\r\n<p><strong>3)install JavaScript-MD5 to display gravatar<\/strong><\/p>\r\n\r\n<p><strong>1.download<\/strong><br \/>\r\nhttps:\/\/github.com\/blueimp\/JavaScript-MD5<\/p>\r\n\r\n<p><strong>2.deploy<\/strong><br \/>\r\nvendor\/assets\/javascripts\/<\/p>\r\n\r\n<p><strong>3.include<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/javascripts\/application.js<\/p>\r\n\r\n<p>\/\/= require md5.min<\/p>\r\n\r\n<p><strong>4)AngularJS template view<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/templates\/users\/index.html.erb<\/p>\r\n\r\n<div ng-non-bindable><pre class=\"prettyprint\">\r\n&lt;div ng-controller=&quot;UsersIndexCtrl&quot;&gt;\r\n  &lt;h1 class=&quot;text-center&quot;&gt;All users&lt;\/h1&gt;\r\n  &lt;ul ng-repeat=&quot;user in users&quot; class=&quot;users&quot;&gt;\r\n    &lt;li&gt;&lt;img alt=&quot;{{user.name}}&quot; src=&quot;https:\/\/secure.gravatar.com\/avatar\/{{hash(user.email)}}?s=52&quot; \/&gt;\r\n      &lt;a href=&quot;\/users\/{{user.id}}&quot;&gt;{{user.name}}&lt;\/a&gt;\r\n    &lt;\/li&gt;\r\n  &lt;\/ul&gt;\r\n&lt;\/div&gt;<\/pre><\/div>\r\n\r\n<p><strong>5)css<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/stylesheets\/custom.css.scss<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\n$grayLighter: rgb(238, 238, 238);\r\n\r\n\/* users index *\/\r\n\r\n.users {\r\n  list-style: none;\r\n  margin: 0;\r\n  li {\r\n    overflow: auto;\r\n    padding: 10px 0;\r\n    border-top: 1px solid $grayLighter;\r\n    &amp;:last-child {\r\n      border-bottom: 1px solid $grayLighter;\r\n    }\r\n  }\r\n}<\/pre>\r\n\r\n<p><strong>6)AngularJS controller<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/javascripts\/mymodule.js.erb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nmyModule.controller(&quot;UsersIndexCtrl&quot;, function($scope, userResource, flashService, $location, sessionResource, $q) {\r\n  var qgetUser = function(deferred) {\r\n    if (flashService.getUser()) {\r\n      var quser_info = flashService.getUser();\r\n      deferred.resolve(quser_info);\r\n    } else {\r\n      sessionResource.current_user({}, function(response) {\r\n        if (response.user.id) {\r\n          var quser_info = response;\r\n        } else {\r\n          var quser_info = { user: {id: 0} };\r\n        }\r\n        flashService.setUser(quser_info);\r\n        deferred.resolve(quser_info);\r\n      });\r\n    }\r\n  }\r\n  var deferred = $q.defer();\r\n  deferred.promise.then(function (result) {\r\n    var user_info = result;\r\n    if (user_info.user.id &gt; 0) {\r\n      $scope.users = userResource.index();\r\n    } else {\r\n      $location.path(&quot;\/signin&quot;);\r\n    }\r\n  },function (reason) {\r\n    console.log(&quot;qgetUser-Error&quot;);\r\n  })\r\n  qgetUser (deferred);\r\n\r\n$ vi app\/views\/layouts\/_header.html.erb\r\n\r\n  $scope.hash = function(email) {\r\n    return md5(email.toLowerCase());\r\n  };\r\n});<\/pre>\r\n\r\n<p style=\"line-height: 20.7999992370605px;\"><strong>7)add link to navigation menu<\/strong><\/p>\r\n\r\n<p>&lt;li ng-show=&quot;chkSignin().user.id &gt; 0&quot;&gt;&lt;%= link_to &quot;Users&quot;, &quot;\/users&quot; %&gt;&lt;\/li&gt;<\/p>","protected":false},"excerpt":{"rendered":"<p>1)Rails controller $ vi app\/controllers\/users_controller.rb class UsersController &lt; ApplicationController before_action :signed_in_user, only: [:index, :update] def index @users = User.all render json: @users end 2)AngularJS route $ vi app\/assets\/javascripts\/mymodule.js.erb .when(&quot;\/users&quot;, { templateUrl: &quot;&lt;%= asset_path(&#39;users\/index.html.erb&#39;) %&gt;&quot; }) 3)install JavaScript-MD5 to display gravatar 1.download https:\/\/github.com\/blueimp\/JavaScript-MD5 2.deploy vendor\/assets\/javascripts\/ 3.include $ vi app\/assets\/javascripts\/application.js \/\/= require md5.min 4)AngularJS template view $ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[137],"tags":[35,148,171],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1121"}],"collection":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/comments?post=1121"}],"version-history":[{"count":1,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1121\/revisions"}],"predecessor-version":[{"id":1122,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1121\/revisions\/1122"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=1121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=1121"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=1121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}