2011-09-08 34 views
0

,如何排除(或明確包括)PARAMS傳遞給一個對象像下面的例子:如何限制params Rails傳遞給一個對象?

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

比方說something過場trust_level不應該通過公開的用戶(被允許設定創建對象)。即使提供的表單不包含它,通過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 
相關問題