Проблема в том, что build_
создано для модели, принадлежащей.
Например, вы можете сделать:
Loading development environment (Rails 5.2.1)
2.4.1 :001 > user = User.new(name:'James Kirk')
=> #<User id: nil, name: "James Kirk", created_at: nil, updated_at: nil, tenant_id: nil>
2.4.1 :002 > user.build_tenant(name:'Enterprise')
=> #<Tenant id: nil, name: "Enterprise", created_at: nil, updated_at: nil>
2.4.1 :003 > user.save
(0.1ms) begin transaction
Tenant Create (0.6ms) INSERT INTO "tenants" ("name", "created_at", "updated_at") VALUES (?, ?, ?) [["name", "Enterprise"], ["created_at", "2018-12-30 15:05:52.531519"], ["updated_at", "2018-12-30 15:05:52.531519"]]
User Create (0.6ms) INSERT INTO "users" ("name", "created_at", "updated_at", "tenant_id") VALUES (?, ?, ?, ?) [["name", "James Kirk"], ["created_at", "2018-12-30 15:05:52.534295"], ["updated_at", "2018-12-30 15:05:52.534295"], ["tenant_id", 2]]
(1.3ms) commit transaction
=> true
Выше сохранен арендаторзатем передает идентификатор пользователю и сохраняет его.
Но вы не можете:
2.4.1 :004 > tenant = Tenant.new(name:'Hazzard')
=> #<Tenant id: nil, name: "Hazzard", created_at: nil, updated_at: nil>
2.4.1 :005 > tenant.build_user(name:'Uncle Jesse')
NoMethodError: undefined method `build_user' for #<Tenant:0x007ff2bbd9b650>
Опция для вашего рабочего процесса: Сохраните экземпляр
Tenant
ранее, получите
id
, затем сохраните экземпляр
User
:
2.4.1 :009 > tenant = Tenant.new(name:'Hazzard')
=> #<Tenant id: nil, name: "Hazzard", created_at: nil, updated_at: nil>
2.4.1 :010 > tenant.save
(0.1ms) begin transaction
Tenant Create (0.7ms) INSERT INTO "tenants" ("name", "created_at", "updated_at") VALUES (?, ?, ?) [["name", "Hazzard"], ["created_at", "2018-12-30 15:12:36.122931"], ["updated_at", "2018-12-30 15:12:36.122931"]]
(1.7ms) commit transaction
=> true
2.4.1 :011 > user = User.new(name:'Uncle Jesse', tenant_id: tenant.id)
=> #<User id: nil, name: "Uncle Jesse", created_at: nil, updated_at: nil, tenant_id: 4>
2.4.1 :012 > user.save
(0.1ms) begin transaction
Tenant Load (0.2ms) SELECT "tenants".* FROM "tenants" WHERE "tenants"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]]
User Create (0.4ms) INSERT INTO "users" ("name", "created_at", "updated_at", "tenant_id") VALUES (?, ?, ?, ?) [["name", "Uncle Jesse"], ["created_at", "2018-12-30 15:12:52.119957"], ["updated_at", "2018-12-30 15:12:52.119957"], ["tenant_id", 4]]
(0.9ms) commit transaction
=> true