2011-08-18 55 views
1

我正在使用Ruby on Rails 3.0.9,我想知道在哪些情況下(即哪些方法)attr_accessible方法有效。例如,如果我用'attr_accessible'效果

attr_accessible :name, :surname 

它會照顧到不分配的,當您使用的User.new(params[:user])語句new(...)方法屬性值。

但是它會照顧什麼其他方法?我可以正確運行,例如,方法爲where(...)exists?(...),但attr_accessible不會生效嗎?

回答

3

如果您使用attr_accessible,該模型將阻止那些未列入attr_accessible列表的列的質量分配。受影響的方法有那些mass assignmentnewcreateupdate_attributesattributes=等所有其它功能將正常工作,甚至單分配是這樣的:

@model_object.column_not_listed_in_attr_accessible_list = "Saved" 
@model_object.column_not_listed_in_attr_accessible_list 
=> "Saved" 

所以,不應該有任何問題,在where使用它們, exists?

2

attr_accessible只會影響與寫入操作相關的功能。

例如:新的,創建update_attributes方法,等等等,其中,存在?等不應該有任何的影響

其他只讀功能。

+0

對於'@ users.update_all(...)'方法,我如何分配一個不'attr_accessible'屬性值? – Backo

+0

@backo ...對於User.update_all,SQL直接發送到數據庫而沒有實例化模型對象,所以'attr_accessible'或'attr_protected'在這裏沒有任何作用,它將被保存..參見[update_all] (http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-update_all)...這個方法構造了一個單獨的SQL UPDATE語句並直接發送到數據庫。它不會實例化相關模型,也不會觸發Active Record回調或驗證 – rubyprince