2013-08-25 8 views
102

Rails 4の強力なパラメータの例はすべてparams.require(:person).permit(:name, :age)です。Rails 4で `params.require(:person).permit(:name、:age)`とは何ですか?

誰かが解体し、起こっていることをrequirepermitとここで説明できますか?

ありがとうございます!

+2

この例は、 'permit'について説明していますが' require'については説明していないドキュメントから直接得られます。 –

答えて

140

コントローラー内のparamsはハッシュのように見えますが、実際はActionController::Parametersのインスタンスで、requirepermitのようないくつかの方法があります。

requireメソッドは特定のパラメータが存在することを保証し、指定されていない場合はrequireメソッドがエラーをスローします。 requireに渡されたキーに対してActionController::Parametersのインスタンスを返します。

permitメソッドは、パラメータオブジェクトのコピーを返し、許可されたキーと値のみを返します。新しいActiveRecordモデルを作成するときは、許可された属性のみがモデルに渡されます。

以前はActiveRecordモデルに含まれていたホワイトリストによく似ていますが、コントローラーに入るのがより理にかなっています。

+24

permitの説明はビットオフです:permitは許可されたキーのみを含む別のハッシュを返します(これは重大です)が 'allowed? 'メソッドに対して' true'で応答します。デフォルトでは、 'ActionController :: Parameters'クラスのインスタンスは' permitted? 'に' false'を返します。 'true'は' permitted'に応答すると、一意の代入でパラメータオブジェクトを使うことができます。それ以外の場合、アプリケーションはForbiddenAttributesエラーをスローします。 – sameers

+0

'require'で' permit'を連鎖させることで、返されたオブジェクトに必要なパラメータも許されていますか? – Dennis

関連する問題