2017-10-09 1 views
-1

コントローラの更新アクションが呼び出されると、サーバがモデルパラメータ(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_pa​​ramsを更新する方法は考えています。

このアクションが実際にコントローラまたはモデル自体で実行されるべきかどうかもわかりません。どんな助けでも大いに感謝されるでしょう:)

注: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 

答えて

0

オプションでも、これを試すことができます。それを変数に割り当て、パラメータをマージします。

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 = allowed_params 
     allowed_params = allowed.merge(layout_is_public: false) 
     end 
    end 
0

- :

関連する問題