Rails角色模型默认如果不存在

时间:2014-12-16 18:51:51

标签: ruby-on-rails model callback one-to-many

我们有Role模型通过Userrole_id相关联,并且有些用户没有分配角色。

如果用户未明确拥有角色集,则需要设置默认Role。没有在迁移中设置默认值。

尝试使用循环:

users.each do |user|
   # some users don't have roles so there are errors
end

角色模型:

class Role < ActiveRecord::Base
    has_many :users
    # Can I add something to set the default role
end

用户模型:

class User < ActiveRecord::Base    
  belongs_to :role    
end

此外,如果这不是一个解决这个问题的方法,那么任何建议都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

您可以将初始化方法添加到用户模型

after_initialize :init

def init
  self.role =>'my_default_role'
end

答案 1 :(得分:1)

在循环中执行与角色相关的操作之前,您还可以对user.role_id进行简单检查。

users.each do |user|
  user.role = Role.find_by(name: 'user') unless user.role
end

或者,您可以修改用户类中的role方法,以便在未定义时添加默认方法。

class User < ActiveRecord::Base    
  belongs_to :role

  def role
    return :role if :role
    Role.find_by(name: 'user')
  end
end

最后,您可以创建一个迁移,将角色添加到没有角色的所有用户。

相关问题