在RoR中连接表

时间:2016-12-03 15:03:17

标签: mysql ruby-on-rails rails-activerecord

我有以下两种型号。

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 

任何人都可以帮我吗?

3 个答案:

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