我正在尝试使用acts_as_tenant
gem 来确定多个组织的 SQL 查询范围。然而,RSpec/FactoryGirl 正在使用一些肮脏的技巧。
一点背景知识:在我的应用程序中,User
两者Grant
都属于Organization
. 只有管理员用户可以创建/删除Grant
s。
就像 gem 的文档建议的那样,我已经插入acts_as_tenant :organization
了我的Grant
和User
模型。我也在我set_current_tenant_through_filter
的. 查询和仅限于当前用户:before_action :set_organization
application_controller.rb
User
Grant
Organization
def set_organization
if current_user
current_organization = Organization.find(current_user.organization_id)
set_current_tenant(current_organization)
end
end
一切似乎都很好。现在编写控制器测试:
# grants_controller_spec.rb
describe GrantsController do
let(:organization) { create(:organization) }
let(:admin) { create(:user, admin: true, organization_id: organization.id) }
...
before(:each) { log_in admin }
...
end
管理部分引发了一个奇怪的错误:
Failure/Error: let(:admin) { create(:user, admin: true, organization_id: organization.id) }
ActiveRecord::RecordInvalid:
Validation failed: Organization can't be blank
因此,即使我已将组织的外键专门传递给 FactoryGirl,它仍然无法识别Organization
.
当我注释掉acts_as_tenant
特定代码时,错误就会消失。我怎样才能让测试永远变绿?