鉴于以下模型:
User: id
UserPosition: user_id, job_title_id
JobTitle: id | title
使用Rails 5,我该怎么做:
current_user.job_title
我需要查询UserPosition
然后JobTitle
才能获得title
?
这可以用一个查询吗?
答案 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_title
和user_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)