我怎样才能覆盖attr_readonly?

时间:2011-05-09 13:42:34

标签: ruby-on-rails attributes

我有一个使用attr_readonly保护的属性,以防止用户改变字段。

我希望能够使用实例方法更改它。这可能吗?

1 个答案:

答案 0 :(得分: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