0

我正在使用宝石https://github.com/dsaronin/milia。我的模型之一称为组:

class Group < ActiveRecord::Base
  #.....

  acts_as_tenant
end

但由于某种原因,我无法创建它。这是rails控制台:

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={}>

但是当涉及到 Group 时,它总是无效的:

> 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

怎么了?

4

1 回答 1

0

我看到的第一件事是您不应该尝试手动创建租户。一个新租户对应于一个新的管理员用户创建,并且在 milia gem 中有定义的代码和过程,您应该遵循这些代码和过程,即使在测试中也是如此。具体来说:租户通过连接表绑定到特定用户(所有者或管理员)。您必须使用文档中概述的 milia 方法来创建新租户,以便正确创建所有内容,包括用户的设计要求。

其次,“组”对于模型来说是一个糟糕的名称,并且可能与 Rails 关键字冲突。您应该重命名您的模型,因为这最终可能成为错误的根源。您不应该使用 Rails 通用的名称。更具体,例如模型的“MyappGroup”。

因此,如果您尝试创建一个租户/组进行测试,您应该使用固定装置。同样,milia 测试目录中的示例说明了如何执行此操作。

于 2015-03-03T05:44:05.870 回答