『改訂新版 基礎Ruby on Rails』の書籍の勉強。
Rails4.1を使っているが、Capter6の新規登録、更新でつまづいたので対処。
つまづいたのは以下の処理。
# 会員の新規登録
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
「ActiveModel::ForbiddenAttributesError」のエラーが出てきて書き込みが出来ない。
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
結果として、しょっぱいけど以下のコードで対応。
# 会員の新規登録
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/