cancan使ってるとstrong_paramtersでエラーになるよ。

Rails4.0化しようと思ってprotected_attributesを削除してstrong_paramtersに対応させようと思って、controllerに以下のように書きました。

def create
  piyo = Piyo.new(piyo_params)
  if piyo.save
    # 成功
  else
    # エラー
  end
end

private
def piyo_params
  params.require(:piyo).permit(:name, :detail)
end

すると、なぜかエラー…。
ActiveModel::ForbiddenAttributesError
sanitize_for_mass_assignmentでエラーが起きてると言われました。

しかしpermitで許可している項目しかpostしてないんだけどなーと思ってぐぐると、どうも原因はCanCanのようでした。

CanCan ActiveModel::ForbiddenAttributesError with rails 4

解決方法が書いてあったので、とりあえずそれを書きます。

application_controller.rbで、before_actionを定義します。
そこで、paramsの一部を先にstrong_parametersで上書きしてしまえばよいようです。

before_action do
  resource = controller_name.singularize.to_sym
  method = "#{resource}_params"
  params[resource] &&= send(method) if respond_to?(method, true)
end

うーむ、CanCan側で自動で対応してほしいところだけど…。


カテゴリー Ruby on Rails | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です