Невозможно создать простой экземпляр модели с 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 есть примеры того, как это сделать.

Другие вопросы по тегам