我有两个模型,一个是用户,另一个是合同。 这些是我的模特
class User < ApplicationRecord
has_many :user_jobs ,dependent: :destroy
has_many :contracts ,through: :user_jobs
end
class Contract < ApplicationRecord
has_many :user_jobs ,dependent: :destroy
has_many :users ,through: :user_jobs
end
class UserJob < ApplicationRecord
belongs_to :user
belongs_to :contract
end
我们必须找到用户的所有独特合同
答案 0 :(得分:2)
如果您只想要用户的工作,那么这将是完美的:
Contract.joins([:user_jobs=> [:user]]).where("users.id = ?",user_id).distinct
或直接
Contract.joins(:user_jobs).where("user_jobs.user_id = ?",user_id).distinct
答案 1 :(得分:2)
要查找contracts
的所有唯一user
,您可以使用LEFT OUTER JOIN
includes
来帮助您加急关联:
Contract.includes(user_jobs: :user).where(user_jobs: {user_id: user_id}).uniq
答案 2 :(得分:1)
您可以进行涉及多个表的连接。 (合同,user_jobs和用户)。
# user_id = 1
Contract.includes(:users).where(users: {id: user_id}).distinct
但我认为最好使用户查询以避免3表连接,如下所示
# user = User.find(1)
user.contracts.distinct
希望有所帮助