{"id":1143,"date":"2015-08-05T05:53:02","date_gmt":"2015-08-05T05:53:02","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=1143"},"modified":"2015-08-05T05:53:02","modified_gmt":"2015-08-05T05:53:02","slug":"create-micropost-with-angularjs","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/create-micropost-with-angularjs\/","title":{"rendered":"Ruby on Rails Tutorial create micropost with AngularJS"},"content":{"rendered":"<p><strong>1)Rails route<\/strong><\/p>\r\n\r\n<p>$ vi config\/routes.rb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nmatch &#39;\/app\/microposts&#39;, to: &#39;microposts#create&#39;,  via: &#39;post&#39;\r\nmatch &#39;\/app\/microposts&#39;, to: &#39;microposts#destroy&#39;, via: &#39;delete&#39;<\/pre>\r\n\r\n<p><strong>2)Rails controller<\/strong><\/p>\r\n\r\n<p>$ vi app\/controllers\/microposts_controller.rb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nclass MicropostsController &lt; ApplicationController\r\n  def create\r\n    remember_token = User.encrypt(cookies[:remember_token])\r\n    current_user ||= User.find_by(remember_token: remember_token)\r\n    micropost = current_user.microposts.build(micropost_params)\r\n    if micropost.save\r\n      render json: micropost, status: :created\r\n    else\r\n      render json: micropost.errors, status: :unprocessable_entity\r\n    end\r\n  end\r\n\r\n  private\r\n    def micropost_params\r\n      params.require(:micropost).permit(:content)\r\n    end\r\nend<\/pre>\r\n\r\n<p><strong>3)AngularJS service<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/javascripts\/mymodule.js.erb<\/p>\r\n\r\n<pre class=\"prettyprint\">\r\nmyModule.factory(&quot;micropostsResource&quot;, function($resource) {\r\n  return $resource(&quot;\/app\/microposts&quot;,{},\r\n    {\r\n      &#39;create&#39;:  { method: &#39;POST&#39; },\r\n      &#39;destroy&#39;: { method: &#39;DELETE&#39; }\r\n    }\r\n  );\r\n});<\/pre>\r\n\r\n<p><strong>4)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;HomeCtrl&quot;, function($scope, flashService, micropostsResource, sessionResource) {\r\n  $scope.micropost = {};\r\n  $scope.micropost.content = &quot;Compose new micropost...&quot;;\r\n  var msg = &quot;Micropost created!&quot;;\r\n  $scope.submit = function() {\r\n    function success(response) {\r\n      sessionResource.current_user({}, function(response1) {\r\n        var current_user = response1;\r\n        flashService.setUser(current_user);\r\n      });\r\n      flashService.push(msg);\r\n      $scope.$emit(&quot;$routeChangeSuccess&quot;);\r\n    }\r\n    function failure(response) {\r\n    }\r\n    micropostsResource.create($scope.micropost, success, failure);\r\n  };\r\n  $scope.getMessage = function() {\r\n    return flashService.get();\r\n  };\r\n});\r\n\r\nmyModule.factory(&quot;flashService&quot;, function ($rootScope, $timeout) {\r\n  var queue = [];\r\n  var currentMessage = &quot;&quot;;\r\n.......\r\n  $rootScope.$on(&quot;$routeChangeSuccess&quot;, function() {\r\n    currentMessage = queue.shift() || &quot;&quot;;\r\n  });\r\n\r\n  return {\r\n    push: function (msg) {\r\n      queue.push(msg);\r\n    },\r\n......<\/pre>\r\n\r\n<p><strong>5)AngularJS template view<\/strong><\/p>\r\n\r\n<p>$ vi app\/assets\/templates\/static_pages\/home.html.erb<\/p>\r\n\r\n<div ng-non-bindable><pre class=\"prettyprint\">\r\n&lt;div ng-controller=&quot;HomeCtrl&quot;&gt;\r\n  &lt;div ng-show=&quot;chkSignin().user.id &gt; 0&quot; class=&quot;row&quot;&gt;\r\n    &lt;div class=&quot;bg-warning&quot; ng-show=&quot;getMessage()&quot;&gt;\r\n      &lt;p&gt;{{getMessage()}}&lt;\/p&gt;\r\n    &lt;\/div&gt;\r\n    &lt;div class=&quot;col-sm-4&quot;&gt;\r\n..........\r\n      &lt;form name=&quot;micropostForm&quot; ng-submit=&quot;submit()&quot; novalidate&gt;\r\n        &lt;textarea name=&quot;content&quot; class=&quot;form-control&quot;\r\n                  ng-model=&quot;micropost.content&quot; rows=&quot;3&quot; required&gt;\r\n        &lt;\/textarea&gt;\r\n        &lt;button type=&quot;submit&quot; ng-disabled=&quot;micropostForm.$invalid&quot;\r\n                class=&quot;btn btn-large btn-primary&quot;&gt;Post\r\n        &lt;\/button&gt;\r\n      &lt;\/form&gt;<\/pre><\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>1)Rails route $ vi config\/routes.rb match &#39;\/app\/microposts&#39;, to: &#39;microposts#create&#39;, via: &#39;post&#39; match &#39;\/app\/microposts&#39;, to: &#39;microposts#destroy&#39;, via: &#39;delete&#39; 2)Rails controller $ vi app\/controllers\/microposts_controller.rb class MicropostsController &lt; ApplicationController def create remember_token = User.encrypt(cookies[:remember_token]) current_user ||= User.find_by(remember_token: remember_token) micropost = current_user.microposts.build(micropost_params) if micropost.save render json: micropost, status: :created else render json: micropost.errors, status: :unprocessable_entity end end private def [&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,178],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1143"}],"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=1143"}],"version-history":[{"count":1,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1143\/revisions"}],"predecessor-version":[{"id":1144,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1143\/revisions\/1144"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=1143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=1143"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=1143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}