我尝试播种以下数据结构:
class Company
has_many :user_roles
has_many :users, through: :user_roles
end
class User
has_many :user_roles
has_many :companies, through: :user_roles
end
class UserRole
belongs_to :user
belongs_to :company
end
除了字段user_id和company_id之外,UserRoles表还具有字段" role"表示用户是否是"成员"或者给某公司的管理员。
我试图按如下方式对表格进行播种:
u1 = User.create(name: 'Tester 1')
u2 = User.create(name: 'Tester 2')
e1 = Company.create(name: 'Company 1')
e2 = Company.create(name: 'Company 2')
ur1 = UserRole.create(role: 'admin', user_id: 2, company_id: 1)
ur2 = UserRole.create(role: 'member', user_id: 3, company_id: 1)
ur3 = UserRole.create(role: 'admin', user_id: 3, company_id: 2)
但是当我尝试验证时, UserRole表始终为空,并且表之间没有创建连接。 如果我尝试使用
直接将用户添加到公司e1.users << [u1, u2]
e2.users << [u2]
然后UserRole表显示,但我不知道如何添加&#39;角色&#39;信息。谢谢你的帮助! :)
答案 0 :(得分:1)
但是当我尝试验证时,UserRole表总是空的而没有 在表之间创建连接。
您的UserRole
个对象很可能没有被创建,因为ID不可用。要确保使用create!
代替create
,以便获得异常(create
将返回false,没有异常,也就是说,它静默)并识别错误:
ur1 = UserRole.create!(role: 'admin', user_id: 2, company_id: 1)
ur2 = UserRole.create!(role: 'member', user_id: 3, company_id: 1)
ur3 = UserRole.create!(role: 'admin', user_id: 3, company_id: 2)
然后UserRole表显示,但我不知道如何添加'角色' 信息。
创建对象后,您可以通过多种方式更新属性(查看here以获取更多信息),最常见的是=
,后跟save
:
e1.role = "admin"
e1.save
或update
:
e1.update(role: "admin")
作为旁注:为确保您没有与ID相关的错误,请使用您已生成的对象(例如u1
,e1
)来分配这些ID:
ur1 = UserRole.create!(role: 'admin', user_id: u1.id, company_id: e1.id)
ur2 = UserRole.create!(role: 'member', user_id: u2.id, company_id: e1.id)
ur3 = UserRole.create!(role: 'admin', user_id: u2.id, company_id: e2.id)
这种方式无论分配了哪个ID(请记住,删除记录不会重置数据库中的自动数字ID),您将始终获得有效的ID。