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側で自動で対応してほしいところだけど…。