1. chobi9999

    Posted

    chobi9999
Changes in title
+Rails4.1で『改訂新版 基礎Ruby on Rails』のコードで「ActiveModel::ForbiddenAttributesError」の対処
Changes in tags
Changes in body
Source | HTML | Preview

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

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/