似乎我在这里停留在一个简单的点上 - 我有一个名为“User”的模型,其中一个名为“username”的字段被设置为唯一。
让我们假设我的网站上有新访问者,想要注册,必须选择用户名并点击“注册”。在这种情况下,我的字段“username”必须是attr_accessible。
我现在想要完成的是当用户编辑他/她的帐户时,字段“用户名”不再可编辑。
我怎么能意识到这一点?
Bouns-Karma:我正在使用带有设计的CanCan,因此具有admin-role的用户可以更改给定用户的用户名的解决方案将是超级的!我的想法告诉我“除非user.admin?”但是我的编码时间太长了。
无论如何 - 我希望会有一些答案:)
答案 0 :(得分:5)
在更新时创建自定义验证:
class User
attr_accessor :admin_action # do not put in attr_accessible
validate :freeze_username, :on => :update
protected
def freeze_username
errors.add(:username, "cannot be changed") if self.username_changed? unless self.admin? || self.admin_action
end
end
admin_action
是一个虚拟属性,如果管理员正在进行更新,您可以从控制器设置为true
。