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

调用时有效,但您无法使用 Ransack 等进行搜索

对于 Ransack,类似的查询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'

但这不起作用。因为每个公司和用户实际上只有一个注册。这可能足够接近,因为我可以active_enrollments通过 ransack 查询并应用范围等。

4

1 回答 1

0

我忘了我已经问过这个了,我在这里回答了:

使用 Ransack 确定关联搜索范围

于 2015-12-07T19:57:30.660 回答