我需要抓住所有拥有应用程序的用户。 User
是我的核心引擎的一部分,许多其他引擎都使用它。我想让用户不知道正在使用它的内容,这就是为什么我不想在我的has_many :training_applications
模型中添加User
。
以下是课程
module Account
class User < ActiveRecord::Base
end
end
module Training
class TrainingApplication < ActiveRecord::Base
belongs_to :user, class: Account::User
end
end
以下显然不会起作用,因为User
没有TrainingApplication
的概念:
Account::User.joins(:training_application).distinct
是否有一种优雅的方式可以返回与User
相关联的TrainingApplication
个对象的独特集合?
我作为快速解决方案获得的是
Account::User.where(id: Training::TrainingApplication.all.pluck(:user_id))
但我认为这是一个更好的解决方案。
答案 0 :(得分:1)
如果您无法向用户添加has_many :training_applications
关联,则以下内容应该是合适的解决方案:
您可以自己输入联接字符串:
t1 = Account::User.table_name
t2 = Training::TrainingApplication.table_name
Account::User.
joins("INNER JOINS #{t2} ON #{t2}.user_id = #{t1}.id").
group("#{t1}.id")
为了多样性,我还要介绍子查询方法:
Account::User.where("id IN (SELECT user_id FROM #{t2})")
我会使用joins
方法,但我相信这两种解决方案都会比您当前的实施方案更快。