1. chobi9999

    Posted

    chobi9999
Changes in title
+Rails4.1で『改訂新版 基礎Ruby on Rails』のコードで「ActiveModel::ForbiddenAttributesError」の対処
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,81 @@
+『改訂新版 基礎Ruby on Rails』の書籍の勉強。
+
+Rails4.1を使っているが、Capter6の新規登録、更新でつまづいたので対処。
+
+つまづいたのは以下の処理
+
+```rb
+ # 会員の新規登録
+ def create
+ @member = Member.new(params[:member])
+ if @member.save
+ redirect_to @member, notice: "会員を登録しました。"
+ else
+ render "new"
+ end
+ end
+
+ # 会員情報の更新
+ def update
+ params.permit!
+ @member = Member.find(params[:id])
+ @member.assign_attributes(params[:member])
+ if @member.save
+ redirect_to @member, notice: "会員情報を更新しました。"
+ else
+ render "edit"
+ end
+ end
+```
+
+
+Rails4.xではmass assignment対策の方法が変わっているとの事。
+
+mass assignmentについては以下で。
+http://nitetsu4.blog.fc2.com/blog-entry-5.html
+
+では、各modelに権限を与えるように以下に設定すれば良いかというとあまりうまく行かず。
+http://taku-k.hatenablog.com/entry/2013/09/08/155537
+
+```rb
+ # 会員の新規登録
+ def create
+ params.permit!
+ @member = Member.new(params[:member])
+ if @member.save
+ redirect_to @member, notice: "会員を登録しました。"
+ else
+ render "new"
+ end
+ end
+
+ # 会員情報の更新
+ def update
+ params.permit!
+ @member = Member.find(params[:id])
+ @member.assign_attributes(params[:member])
+ if @member.save
+ redirect_to @member, notice: "会員情報を更新しました。"
+ else
+ render "edit"
+ end
+ end
+```
+
+Strong Parameters関連の設定なんだろうけど、いまいち設定ができず、上記のような暫定策で設定。
+
+
+以下は調べているうちに参考になったもの。
+
+★Rails4.0に含まれる strong_parameters について
+http://willnet.in/48
+
+★Rails4のMass Assignment脆弱性対策のStrong Parametersについて
+http://wada811.blogspot.com/2013/08/strong-parameters-mass-assignment-vulnerability-countermeasure-in-rails4.html
+
+★Rails4 の Strong Parameters でリクエストパラメータを検証する
+http://www.techscore.com/blog/2013/01/29/rails4-%E3%81%AE-strong-parameters-%E3%81%A7%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E6%A4%9C%E8%A8%BC%E3%81%99%E3%82%8B/
+
+★改訂新版 基礎Ruby on Railsがようやく終わった
+http://yuki3738.net/2014/08/25/post-365/
+