acts_as_tenant
gem を使用して、SQL クエリの範囲を複数の組織に限定しようとしています。ただし、RSpec/FactoryGirl はいくつかの汚いトリックを実行しています。
ちょっとした背景: 私のアプリではUser
、Grant
どちらもOrganization
. を作成/削除できるGrant
のは、管理者ユーザーのみです。
宝石のドキュメントのアドバイスのように、私はモデルとモデルに挿入acts_as_tenant :organization
しました。また、 で a を定義しました。とのクエリは、現在のユーザーのみにスコープが設定されています。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
と、エラーはなくなります。テストを完全に緑色にするにはどうすればよいですか?