创建后,用户名应该是不可编辑的

时间:2013-03-03 05:52:52

标签: ruby-on-rails model devise ruby-on-rails-3.2

似乎我在这里停留在一个简单的点上 - 我有一个名为“User”的模型,其中一个名为“username”的字段被设置为唯一。

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

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

我怎么能意识到这一点?

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

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

1 个答案:

答案 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