{"id":1112,"date":"2015-08-04T05:53:14","date_gmt":"2015-08-04T05:53:14","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=1112"},"modified":"2015-08-04T05:53:14","modified_gmt":"2015-08-04T05:53:14","slug":"updating-users-with-angularjs","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/updating-users-with-angularjs\/","title":{"rendered":"Ruby on Rails Tutorial updating users 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\n  def update\r\n    @user = User.find(params[:id])\r\n    if @user.update_attributes(user_params)\r\n      render json: @user, status: :created, location: @user\r\n    else\r\n      render json: @user.errors, status: :unprocessable_entity\r\n    end\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\nmyModule = angular.module(&#39;myModule&#39;, [&#39;ui.bootstrap&#39;,&#39;ngRoute&#39;,&#39;ngResource&#39;]);\r\n\r\nmyModule.config(function($routeProvider, $locationProvider) {\r\n  $locationProvider.html5Mode(true);\r\n  $routeProvider\r\n........\r\n    .when(&quot;\/users\/:id\/edit&quot;, {\r\n     templateUrl: &quot;&lt;%= asset_path(&#39;users\/new.html.erb&#39;) %&gt; &quot;\r\n     })<\/pre>\r\n\r\n<p><strong>(3)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;UsersNewCtrl&quot;, function($scope, userResource, $location, flashService, $routeParams) {\r\n  if ($routeParams.id) {\r\n    var msg = &quot;Profile updated&quot;;\r\n    $scope.title = &quot;Update your profile&quot;;\r\n    $scope.btn_name = &quot;Save changes&quot;;\r\n    userResource.show({ id: $routeParams.id }, function(user_info) {\r\n      $scope.user = user_info.user;\r\n      $scope.gravatar_url = user_info.gravatar_url;\r\n    })\r\n  } else {\r\n    var msg = &quot;Welcome to the Sample App!&quot;;\r\n    $scope.title = &quot;Sing up&quot;;\r\n    $scope.btn_name = &quot;Create my account&quot;;\r\n    $scope.user = new userResource();\r\n  }\r\n  $scope.submit = function() {\r\n.......\r\n    if ($routeParams.id) {\r\n      userResource.update($scope.user, success, failure);\r\n    } else {\r\n      userResource.create($scope.user, success, failure);\r\n    }\r\n  };<\/pre>\r\n\r\n<p>ref.<br \/>\r\nRails controller&nbsp;<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\n  def show\r\n    user = User.find(params[:id])\r\n    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)\r\n    @user_info = {\r\n      user: user,\r\n      gravatar_url: &quot;https:\/\/secure.gravatar.com\/avatar\/#{gravatar_id}&quot;\r\n    }\r\n    render json: @user_info\r\n  end<\/pre>\r\n\r\n<p><strong>(4)AngularJS template view<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/templates\/users\/new.html.erb<\/p>\r\n\r\n<div ng-non-bindable><pre class=\"prettyprint\">\r\n&lt;h1 class=&quot;text-center&quot;&gt;{{title}}&lt;\/h1&gt;\r\n.....\r\n&lt;button ng-click=&quot;submit()&quot; class=&quot;btn btn-primary&quot;\r\n         ng-disabled=&quot;userNewForm.$invalid&quot; &gt;\r\n  {{btn_name}}\r\n&lt;\/button&gt;\r\n......\r\n&lt;span ng-show=&quot;user.id&quot;&gt;\r\n  &lt;img alt=&quot;{{user.name}}&quot; src=&quot;{{gravatar_url}}&quot; \/&gt;\r\n  &lt;a href=&quot;http:\/\/gravatar.com\/emails&quot;&gt;change&lt;\/a&gt;\r\n&lt;\/span&gt;<\/pre><\/div>\r\n\r\n<p><strong>(5)add link to navigation menu<\/strong><\/p>\r\n\r\n<p>$ vi app\/views\/layouts\/_header.html.erb<\/p>\r\n\r\n<div ng-non-bindable><pre class=\"prettyprint\">\r\n&lt;li&gt;&lt;%= link_to &quot;Settings&quot;, &quot;\/users\/{{chkSignin().user.id}}\/edit&quot; %&gt;&lt;\/li&gt;<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>(1)Rails controller $ vi app\/controllers\/users_controller.rb def update @user = User.find(params[:id]) if @user.update_attributes(user_params) render json: @user, status: :created, location: @user else render json: @user.errors, status: :unprocessable_entity end end (2)AngularJS route $ vi app\/assets\/javascripts\/mymodule.js.erb myModule = angular.module(&#39;myModule&#39;, [&#39;ui.bootstrap&#39;,&#39;ngRoute&#39;,&#39;ngResource&#39;]); myModule.config(function($routeProvider, $locationProvider) { $locationProvider.html5Mode(true); $routeProvider &#8230;&#8230;.. .when(&quot;\/users\/:id\/edit&quot;, { templateUrl: &quot;&lt;%= asset_path(&#39;users\/new.html.erb&#39;) %&gt; &quot; }) (3)AngularJS controller $ vi app\/assets\/javascripts\/mymodule.js.erb [&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,167,145,166],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1112"}],"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=1112"}],"version-history":[{"count":1,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1112\/revisions"}],"predecessor-version":[{"id":1113,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1112\/revisions\/1113"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=1112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=1112"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=1112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}