【问题标题】:Username should be non-editable after creation用户名在创建后不可编辑
【发布时间】:2013-03-03 05:52:51
【问题描述】:

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

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

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

我怎么能意识到这一点?

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

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

【问题讨论】:

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


    【解决方案1】:

    在更新时创建自定义验证:

    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

    【讨论】:

      猜你喜欢
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多