Невозможно создать простой экземпляр модели с acts_as_tenant
Я использую драгоценный камень https://github.com/dsaronin/milia. Одна из моих моделей называется Group:
class Group < ActiveRecord::Base
#.....
acts_as_tenant
end
Но я не могу создать это по какой-то причине. Вот консоль рельсов:
t = Tenant.create(cname: 'cname1', company: 'comp1')
=> #<Tenant id: 3, tenant_id: nil, cname: "cname1", company: "comp1", created_at: "2015-03-03 03:39:38", updated_at: "2015-03-03 03:39:38">
[33] pry(#<Cucumber::Rails::World>)> t.valid?
=> true
[34] pry(#<Cucumber::Rails::World>)> t.new_record?
=> false
[35] pry(#<Cucumber::Rails::World>)> t.errors
=> #<ActiveModel::Errors:0x00000108a5e6d8
@base=
#<Tenant id: 3, tenant_id: nil, cname: "cname1", company: "comp1", created_at: "2015-03-03 03:39:38", updated_at: "2015-03-03 03:39:38">,
@messages={}>
Но когда дело доходит до группы, это всегда неверно:
> g = Group.new(name: 'name1')
=> #<Group id: nil, name: "name1", room: nil, person_id: nil, created_at: nil, updated_at: nil, tenant_id: nil>
[37] pry(#<Cucumber::Rails::World>)> g.tenant
=> nil
[38] pry(#<Cucumber::Rails::World>)> g.tenant = t
=> #<Tenant id: 3, tenant_id: nil, cname: "cname1", company: "comp1", created_at: "2015-03-03 03:39:38", updated_at: "2015-03-03 03:39:38">
[39] pry(#<Cucumber::Rails::World>)> g.save!
ActiveRecord::RecordInvalid: Gültigkeitsprüfung ist fehlgeschlagen: Tenant muss ausgefüllt werden
from /Users/alex/.rvm/gems/ruby-2.1.2/gems/activerecord-3.2.21/lib/active_record/validations.rb:56:in `save!'
[40] pry(#<Cucumber::Rails::World>)> g.errors
=> #<ActiveModel::Errors:0x00000108888ea8
@base=
#<Group id: nil, name: "name1", room: nil, person_id: nil, created_at: nil, updated_at: nil, tenant_id: nil>,
@messages={:tenant_id=>["muss ausgefüllt werden"]}>
[41] pry(#<Cucumber::Rails::World>)> g.valid?
=> false
[42] pry(#<Cucumber::Rails::World>)> g.new_record?
=> true
Что с этим?
1 ответ
Первое, что я вижу, это то, что вы НЕ должны пытаться вручную создать арендатора. Новый клиент соответствует созданию нового пользователя-администратора, и в геме milia есть определенный код и процедура, которой вы должны следовать, даже в тестировании. В частности: арендатор привязан к определенному пользователю (владельцу или администратору) через таблицу соединений. Вы должны использовать методы milia, описанные в документации для создания нового клиента, чтобы все было создано правильно, включая требования к устройству для пользователя.
Во-вторых, "Group" - это плохое имя для модели, и, вероятно, оно конфликтует с ключевым словом Rails. Вы должны переименовать вашу модель, так как это может в конечном итоге стать источником ошибки. Вы не должны использовать имена, общие для Rails. Будьте более конкретны, например, "MyappGroup" для модели.
Поэтому, если вы пытаетесь создать арендатора / группу для тестирования, вам следует использовать фиксаторы. Опять же, в каталоге тестов milia есть примеры того, как это сделать.