0

看来我在这里停留在一个简单的点上-我有一个名为“用户”的模型,其中一个名为“用户名”的字段被设置为唯一。

假设有一个新访问者在我的网站上,想要注册,必须选择一个用户名,然后点击“注册”。在这种情况下,我的字段“用户名”必须是 attr_accessible。

我现在想要完成的是,当用户编辑他/她的帐户时,“用户名”字段不再可编辑。

我怎么能意识到这一点?

Bouns-Karma:我在设计中使用 CanCan,因此具有管理员角色的用户可以更改给定用户的用户名的解决方案将是超棒的!我的想法告诉我“除非 user.admin?” 但我的编码中断时间太长了。

无论如何-我希望会有一些答案:)

4

1 回答 1

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_actiontrue是一个虚拟属性,如果管理员进行更新,您可以从控制器设置它。

于 2013-03-03T05:59:31.037 回答