2011-09-08 4 views
0

は、どのように私は、次の例のようにオブジェクトに渡さPARAMS除外(または明示的に含める)ことができます。paramsを制限する方法Railsはオブジェクトに渡されますか?

def create 
    @something = Something.new(params[:something]) 
    ... 
    @something.save  
    end 

セイ例somethingのために許可されている一般ユーザー(スルー設定可能であるべきではないフィールドtrust_levelを持っていましたオブジェクトを作成します)。提供されたフォームにHTTPが含まれていなくても、このフィールドをHTTP経由で送信するのは簡単です。では、このフィールドがnew(またはupdate_attributes)メソッドに渡されるのを防ぐ方法はありますか?

答えて

4

attr_accessibleを使用して、質量割り当てに使用できるものを定義します。

(それはlink to the docsだが、それが言うには少し難しいので、ここには再びです。)

+1

あなたがいうだけで大量の割り当てから特定のフィールドを除外したい場合はホワイトリストは、ブラックリストよりも安全ですが、あなたはまた 'attr_protected'クラスのメソッドを使用することができます。 –

+1

うん、良い点、もし避けるべきことがほんの少しあれば。 –

1

もう一つの方法は、filter out unwantedのparamsにあります。あなたが特定のパラメータだけを取り除きたい場合、attr_accessibleを使用することはできません(これはあなたの問題に対するよりよい解決策です)。

hsh.reject {| key, value | block } → a_hash 
Hash#delete_ifと同じ

、 が、上の作品(戻り)HSHのコピー。 hsh.dup.delete_ifに相当します。

enum.reject {| obj | block } → array 
enum.reject → an_enumerator 
関連する問題