2016-07-21 6 views
1

私は、Ramsful API(ActionController :: API)サービスを持っており、paramsのリストを受け取ります。 RESTfulサービスは、JSON本体リクエスト(Content-Typeがapplication/json)を受け取ります。私は(右のアクションdefの後に)コントローラ/アクションをデバッグするとのparamsリストにピークを取ると、次のように表示されます。それが渡されたとき すべての要求は(それに持ってRails 5 Params/Strong Params issue

<ActionController::Parameters {"given_name"=>"Mark", "subdomain"=>"development", "controller"=>"user", "action"=>"create", "user"=>{"given_name"=>"Mark"}} permitted: false> 

EDITコントローラ/アクションに - POSTmanを使用して):

{"given_name":"Mark"} 

このオブジェクトにはgiven_name paramsが2回含まれています。これは正常な動作ですか?私はコントローラ/アクションに "ユーザ"オブジェクト(jsonオブジェクト)を渡さなかったのですか?許可された旗は何ですか?

user = User.new(params) 

私が手:

私は(今私はRESTfulな呼び出しをテストし、ユーザーオブジェクトが...何の検証がまだプログラムされていない除います任意の値を代入しています)を使用してみてください

エラー:??

#<ActiveModel::ForbiddenAttributesError: ActiveModel::ForbiddenAttributesError> 

だから、私はこの背後にある理由のためにどこでも見てきました(理由のparamsリストで「ユーザー」キーがあるなぜ私がエラーを取得しています許可フラグの目的は何ですか私がparamsを割り当てようとすると)?

EDIT

いくつかのテストを行った後、私はルートは名前を変更し、コントローラを指すように「tester_controller」と設定に「user_controller」からコントローラ名を変更します。

上記のparamsリストの "user"オブジェクトが "tester"に変更されたようです。では、なぜparamリストには、コントローラの名前を持つすべてのパラメータが渡された「オブジェクト」が含まれていますか?それが事実なら、それはなぜ必要なのですか?

ご協力いただければ幸いです。

+0

'params [' user '] 'いいえ?このように、ユーザーの属性 'controller'または' action'を割り当てようとしているようです。 – LolWalid

+0

要求がすべてそれに渡されるときに、{"given_name": "Mark"}です。しかし、アクションでは、私は上記のパラメータを取得します。 – Sean

+0

したがって、私はコントローラを "user_controller"から "tester_controller"に変更しました。 "user" => {"given_name": "Mark"} "が" tester "=> {" given_name ":" Mark "}"に変更されたようです。なぜ、コントローラ名がparamsリストに追加された "オブジェクト"がありますか? – Sean

答えて

0

あなたのコントローラ内の大量の割り当てのために許容される属性を指定する必要があります。

def create 
    @user = User.new(params.require(:user).permit(:given_name)) 
end 

これは、ユーザーオブジェクトの場合はroleのように、アプリケーション内部の属性を変更要求の記事を作るから、悪意のあるユーザーを防ぎます。

上記のように、strong parametersを参照すると、より良い説明が得られます。

0

paramsには常に:action:controllerのキーが含まれているため、paramsをコンストラクタに渡すことはできません。新しいオブジェクトの属性は、作成したいモデルを識別するキーの下にハッシュで入れる必要があります。 :userrails guides、特に「フォームヘルパー」のchapter 7にご相談ください。

あなたが強いのパラメータについての詳細を知りたい場合は、そのためのレールガイドでchapterもあります:)