{"id":1146,"date":"2015-08-05T06:24:07","date_gmt":"2015-08-05T06:24:07","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=1146"},"modified":"2015-08-05T06:26:53","modified_gmt":"2015-08-05T06:26:53","slug":"micropost-access-control-error-message","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/micropost-access-control-error-message\/","title":{"rendered":"Ruby on Rails Tutorial micropost access control, error message with AngularJS"},"content":{"rendered":"<p><strong>(1)micropost access control<\/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  before_action :signed_in_user, only: [:create, :destroy]\r\n  before_action :correct_user,   only: :destroy\r\n\r\n  private\r\n    def signed_in_user\r\n      remember_token = User.encrypt(cookies[:remember_token])\r\n      current_user ||= User.find_by(remember_token: remember_token)\r\n      if current_user.nil?\r\n        render status: :unauthorized\r\n      end\r\n    end\r\n    def correct_user\r\n      micropost = Micropost.find(params[:id])\r\n      remember_token = User.encrypt(cookies[:remember_token])\r\n      current_user ||= User.find_by(remember_token: remember_token)\r\n      if current_user.id != micropost.user_id\r\n        render status: :unauthorized\r\n      end\r\n    end<\/pre>\r\n\r\n<p><strong>(2)validation, error message<\/strong><\/p>\r\n\r\n<p><strong>1)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\r\n  $scope.submit = function() {\r\n    function success(response) {\r\n.........\r\n    }\r\n    function failure(response) {\r\n      _.each(response.data, function(errors, key) {\r\n        _.each(errors, function(e) {\r\n          $scope.micropostForm[key].$dirty = true;\r\n          $scope.micropostForm[key].$setValidity(e, false);\r\n        });\r\n      });\r\n    }\r\n    micropostsResource.create($scope.micropost, success, failure);\r\n  };\r\n\r\n  $scope.errorMessage = function(name) {\r\n    var s = $scope.micropostForm[name].$error;\r\n    result = [];\r\n    _.each(s, function(key, value) {\r\n      result.push(name + &quot; &quot; + value);\r\n    });\r\n    return result.join(&quot;, &quot;);\r\n  };<\/pre>\r\n\r\n<p><strong>2)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.....\r\n  &lt;form name=&quot;micropostForm&quot; ng-submit=&quot;submit()&quot; novalidate&gt;\r\n    &lt;textarea name=&quot;micropost&quot; class=&quot;form-control&quot;\r\n              ng-model=&quot;micropost.content&quot; rows=&quot;3&quot;\r\n              ng-maxlength=&quot;140&quot; required&gt;\r\n    &lt;\/textarea&gt;\r\n    &lt;span class=&quot;text-danger&quot; ng-show=&quot;micropostForm.content.$dirty &amp;&amp; micropostForm.content.$error.maxlength&quot;&gt;\r\n      content is too long (maximum is 140 characters) \r\n    &lt;\/span&gt;\r\n    &lt;span class=&quot;text-danger&quot; ng-show=&quot;micropostForm.content.$invalid &amp;&amp; micropostForm.content.$dirty&quot;&gt;\r\n      {{errorMessage(&#39;content&#39;)}}\r\n    &lt;\/span&gt;&lt;br \/&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;\r\n<\/pre><\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>(1)micropost access control $ vi app\/controllers\/microposts_controller.rb class MicropostsController &lt; ApplicationController before_action :signed_in_user, only: [:create, :destroy] before_action :correct_user, only: :destroy private def signed_in_user remember_token = User.encrypt(cookies[:remember_token]) current_user ||= User.find_by(remember_token: remember_token) if current_user.nil? render status: :unauthorized end end def correct_user micropost = Micropost.find(params[:id]) remember_token = User.encrypt(cookies[:remember_token]) current_user ||= User.find_by(remember_token: remember_token) if current_user.id != micropost.user_id render status: :unauthorized [&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,168,178],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1146"}],"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=1146"}],"version-history":[{"count":2,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1146\/revisions"}],"predecessor-version":[{"id":1149,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/1146\/revisions\/1149"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=1146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=1146"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=1146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}