2011-05-09 67 views
3

我有一個使用attr_readonly進行保護的屬性,以防止用戶更改字段。如何覆蓋attr_readonly?

我希望能夠使用實例方法對其進行修改。這可能嗎?

回答

5

您應該在此處使用attr_protected而不是attr_readonly。那麼你將被保護免受形式的大規模排斥。

#in model 
attr_protected :my_field 
#in controller 
obj = MyModel.new({:my_field => "dsadsad"}) 
obj.my_field 
#=> nil 
obj.my_field = "ololo" 
obj.my_field 
#=> "ololo" 

編輯

情況:你需要設置email只有一次:在創建用戶。然後,只有當您是管理員時纔想編輯電子郵件。

# Model 
attr_protected :email 

# Controller 
def create 
    @user = User.new params[:user] 
    @user.email = params[:user][:email] 
    @user.save 
    respond_with @user 
end 

def update 
    @user = User.find params[:id] 
    @user.email = params[:user][:email] if curent_user.admin? 
    @user.update_attributes params[:user] 
    respond_with @user 
end 

還檢查了:http://railscasts.com/episodes/237-dynamic-attr-accessible

+0

但用戶需要能夠創建過程中修改的屬性。 (這是一個電子郵件字段) – tanman 2011-05-09 22:37:28

+0

檢查我的更新 – fl00r 2011-05-10 08:57:38