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

Mic*_*jda 0 model ruby-on-rails devise ruby-on-rails-3.2

看来我在这里只停留在一个简单的点 - 我有一个名为"User"的模型,其中一个名为"username"的字段设置为唯一.

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

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

我怎么能意识到这一点?

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

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

Ben*_*van 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
Run Code Online (Sandbox Code Playgroud)

admin_action是一个虚拟属性,true如果管理员正在进行更新,您可以从控制器设置该属性.