Rails 5 ActiveRecord查询 - 可以加入3个表吗?

时间:2017-06-29 04:04:30

标签: ruby-on-rails ruby postgresql activerecord ruby-on-rails-5

鉴于以下模型:

User: id
UserPosition: user_id, job_title_id
JobTitle: id | title

使用Rails 5,我该怎么做:

current_user.job_title

我需要查询UserPosition然后JobTitle才能获得title

这可以用一个查询吗?

2 个答案:

答案 0 :(得分:2)

你可以通过这样的协会来做到这一点:

class User < ApplicationRecord
  has_many :user_positions
  has_many :job_titles, through: :user_positions
end

class UserPositions < ApplicationRecord
  belongs_to :user
  belongs_to :job_title
end

class JobTitle < ApplicationRecord
  has_many :user_positions
  has_many :users, through: :user_positions
end

这里是the documentation,用于Rails中的多对多关系。

答案 1 :(得分:1)

将您的关系定义为:

class User < ApplicationRecord
  has_many :user_positions
end

class JobTitle < ApplicationRecord
  has_many :user_positions
end

class UserPosition < ApplicationRecord
  belongs_to :user
  belongs_to :job_title
end

然后,您可以使用joins,同时使用job_titleuser_position模型,user模型,然后了解user.id,那么,可以使用pluck来获取所需的属性:

User.joins(user_positions: :job_title).where(id: 1).pluck('job_titles.title')

这会给你一个SQL查询,如:

SELECT job_titles.title 
FROM "users" 
INNER JOIN "user_positions" 
ON "user_positions"."user_id" = "users"."id" 
INNER JOIN "job_titles" 
ON "job_titles"."id" = "user_positions"."job_title_id" 
WHERE (users.id = 1)