これを正しく説明できることを願っています。
私は次のものを持っています:
class User < ActiveRecord::Base
has_many :enrollments
has_many :companies, through: :enrollments, dependent: :destroy
class Enrollment < ActiveRecord::Base
belongs_to :user
belongs_to :company
class Company < ActiveRecord::Base
has_many :enrollments
has_many :users, through: :enrollments
これらはすべて、アパートメント ジェムのパブリック テナントにあります。会社がテナントです。ここでの考え方は、ユーザーが登録によって会社に関連付けられるということです。Enrollments に他の情報があるので、STI は使用しませんでした。
current_user.enrollments などを呼び出すことができますが、実際に必要なのは、現在のテナントから登録を取得する has_one タイプの関連付けです。
私はこれを追加しました:
def enrollment
company = Company.where(tenant_name: Apartment::Tenant.current).last
company.enrollments.where(user_id: self.id).last
end
呼び出されたときに機能しますが、ランサックなどで検索することはできません
ランサックの場合、次のようなクエリはenrollments_somefield_eq=somevalue
正常に機能しますが、すべての登録を検索しますが、現在の会社の登録のみが必要です。アソシエーションに条件を追加できる場所を見てきましたが、それを使用するモデルでテナント ID を取得できるとは思いません。
ここに何かアイデアはありますか?
アップデート
私はここにいます-大量のグーグルの後、私はこれをまとめました:
has_many :active_enrollments, -> { joins(:company).where("companies.tenant_name = '#{Apartment::Tenant.current}'") }, class_name: 'Enrollment'
本当に欲しい:
has_one :active_enrollment, -> { joins(:company).where("companies.tenant_name = '#{Apartment::Tenant.current}'").last }, class_name: 'Enrollment'
しかし、これは機能しません。実際には、企業およびユーザーごとに 1 つの登録しかないためです。active_enrollments
ランサック経由でクエリを実行でき、スコープが適用されるなど、これは十分に近いかもしれません。