コントローラの更新アクションが呼び出されると、サーバがモデルパラメータ(layout_is_public)を更新したい。しかし、パラメータはユーザーによって直接更新されるべきではありません。レールにカスタム強力なパラメータを追加する方法5
私のコントローラ強いのparams:同じコントローラで
def allowed_params
params.require(:payload).permit(:name, :layout_id)
end
マイbefore_action:
def correct_layout
if allowed_params[:layout_id].present?
puts allowed_params.merge(layout_is_public: false).inspect
# puts output is as expected:
# => <ActionController::Parameters {"layout_id"=>1, "layout_is_public"=>false} permitted: true>
allowed_params = allowed_params.merge(layout_is_public: false)
end
end
私も、新たに生成されたパラメータが含まれるように、私のallowed_paramsを更新する方法は考えています。
このアクションが実際にコントローラまたはモデル自体で実行されるべきかどうかもわかりません。どんな助けでも大いに感謝されるでしょう:)
注:layout_is_public変数は、簡潔さのためにここではfalseに設定されています。あなたが直接、強力なパラメータを割り当てることはできません
private
def allowed_params
ap = params.require(:payload).permit(:name, :layout_id)
ap[:layout_is_public] = 'false' if params[:payload][:layout_id].present?
ap
end