1

これを正しく説明できることを願っています。

私は次のものを持っています:

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ランサック経由でクエリを実行でき、スコープが適用されるなど、これは十分に近いかもしれません。

4

1 に答える 1

0

私はすでにこれを尋ねたことを忘れていたので、ここで答えました:

Ransack を使用した連想検索のスコープ設定

于 2015-12-07T19:57:30.660 に答える