8

長年の Java 開発者 - ror の初心者 - Rails 4 で JSON REST API を構築していますが、強力なパラメーターを使用して問題に遭遇しました。エンドポイントの 1 つに対して HTTP POST 要求を実行するとき、コントローラーがメイン オブジェクトを要求し、その属性の一部を要求し、他の特定の属性が存在する場合はそれらも返すようにしたいと考えています。これらの require および permit メソッドがハッシュを返すのを見て、同じオブジェクトの特定の属性を許可および要求するためのベスト プラクティスは何か疑問に思っています。おそらく2つのハッシュをマージする必要がありますか? この問題にかなりの時間を費やしましたので、ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

15

私の知る限りでは、コントローラーでパラメーターのみを許可し、パラメーターのコントローラーで直接ではなく、モデルで属性の検証を実行する方法だと思います。

強力なパラメーターは、悪意のある人がユーザーフォームをハッキングして「role = admin」などを挿入しないようにするためだけに存在します。

私の知る限り、強力なパラメーター機能は、属性のハッシュを含む単一のキー (ユーザーなどと呼ばれるモデル キーなど) 以外に特定のパラメーターが存在することを実際に要求することを意図して設計されていません。

次のようにモデルで検証を行うことができます。

class User < ActiveRecord::Base
  validates :email, :first_name, :last_name, presence: true
end

simple_form のようなものを使用すると、エラーも自動的に表示されます。

ここには、実際に許可する前に複数の要件があることを示唆する人がいます。私の個人的な意見は、それは非常に醜いということです。

強力なパラメータには複数のパラメータが必要です

def user_params
  params.require(:user).require(:first_name)
  params.require(:user).require(:last_name)
  params.require(:user).permit(:first_name, :last_name)
end
于 2015-05-03T02:52:14.530 に答える