我们找到用户的所有合同以及该特定用户的所有合同工作

时间:2016-12-22 09:29:08

标签: ruby-on-rails ruby

我有两个模型,一个是用户,另一个是合同。 这些是我的模特

  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

我们必须找到用户的所有独特合同

3 个答案:

答案 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

希望有所帮助