【问题标题】:Rails Many To Many, seed records with extra informationRails 多对多,带有额外信息的种子记录
【发布时间】:2017-05-08 21:30:18
【问题描述】:

我正在尝试植入以下数据结构:

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表显示,但是我不知道如何添加'role'信息。谢谢你的帮助! :)

【问题讨论】:

    标签: ruby-on-rails seeding


    【解决方案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表显示出来了,但是不知道怎么添加'role' 信息。

    创建对象后,您可以通过多种方式更新属性(查看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),您总是会得到一个有效的。

    【讨论】:

    • @OriginalBBQSauce 太好了!乐意效劳!在播种时,我建议始终使用 bang ! 方法(例如 create!)来立即识别任何错误。
    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2014-07-13
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多