如何覆盖 attr_readonly?

发布于 2024-11-05 18:52:38 字数 77 浏览 0 评论 0原文

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

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

I have an attribute that is protected using attr_readonly to prevent users from altering the field.

I want to be able to alter it using an instance method. Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

Hello爱情风 2024-11-12 18:52:38

您应该在此处使用 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"

编辑

情况:您只需设置电子邮件一次:创建用户时。那么只有当您是管理员时才需要编辑电子邮件。

# 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

You should use attr_protected here instead of attr_readonly. Then you will be protected from mass-asignment from forms.

#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"

EDIT

Situation: you need to set email only once: while creating user. Then you want to edit email only if you're admin.

# 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

Also check out: http://railscasts.com/episodes/237-dynamic-attr-accessible

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文