LoginSignup
4

More than 5 years have passed since last update.

Rails4.1で『改訂新版 基礎Ruby on Rails』のコードで「ActiveModel::ForbiddenAttributesError」の対処

Last updated at Posted at 2015-01-05

『改訂新版 基礎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/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4