我有以下两种型号。
class ResponseMap < ActiveRecord::Base
has_many :response, foreign_key: 'map_id', dependent: :destroy
belongs_to :reviewer, class_name: 'Participant', foreign_key: 'reviewer_id'
class Response < ActiveRecord::Base
include ResponseAnalytic
belongs_to :response_map, class_name: 'ResponseMap', foreign_key: 'map_id'
我必须加入这两个模型,并在ResponseMap中找到特定评论者给出的响应,以便response.map_id = responseMap.id。这是我需要转换为ResponseMap模型的活动记录查询的SQL查询。
select * from response_maps as rm join responses as r on r.map_id = rm.id where rm.reviewer_id = 97
任何人都可以帮我吗?
答案 0 :(得分:1)
首先,您需要更正关联
class ResponseMap < ActiveRecord::Base
has_many :responses, foreign_key: 'map_id', dependent: :destroy
belongs_to :reviewer, class_name: 'Participant', foreign_key: 'reviewer_id'
如果您有has_many
关联,则该名称应为复数。
查询
ResponseMap.joins(:responses).where(reviewer_id: 97)
答案 1 :(得分:0)
我认为has_many :response
应为has_many :responses
使用joins
方法:
ResponseMap.joins(:responses).where(reviewer_id: 97)
答案 2 :(得分:0)
您可以使用连接方法。
ResponseMap.joins(:response).where('response_maps.map_id = ?', map_id)
这将是内部连接response_maps表,其中包含您想要实现的响应表。 阅读有关rails指南的联接的更多信息:http://guides.rubyonrails.org/active_record_querying.html#joining-tables