Rails Many To Many,使用额外信息播种记录

时间:2017-05-08 21:30:18

标签: ruby-on-rails seeding

我尝试播种以下数据结构:

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;信息。谢谢你的帮助! :)

1 个答案:

答案 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相关的错误,请使用您已生成的对象(例如u1e1)来分配这些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。