我希望我能正确解释这一点。
我有以下内容:
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 查询并应用范围等。