我希望我能正确解释一下。
我有以下内容:
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
这些都是公寓宝石的公共租户。公司是租户。这里的想法是用户通过注册与公司相关联。我在注册中有其他信息,所以我没有使用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'
但这不起作用。因为每个公司和用户实际上只有一个注册。这可能足够接近因为我可以通过ransack查询active_enrollments
并且应用范围等。