其中has_many不为空的Rails

Tom*_*ond 5 ruby-on-rails

我的Campaign模特很多Response.

我想做的是搜索就像 Campaign.where.not(responses.nil?)

基本上返回所有有回复的广告系列的列表.

最好的方法是什么?

Nic*_*ais 7

根据这些答案,您可以通过以下几种方法来实现这一目标:

轨道 7+where.associated

Campaign.where.associated(:responses)
Run Code Online (Sandbox Code Playgroud)

铁轨 4+

Campaign.includes(:responses).where.not(responses: {id: nil})
Run Code Online (Sandbox Code Playgroud)

或者

Campaign.joins(:responses).distinct
Run Code Online (Sandbox Code Playgroud)

轨道 3+

Campaign.joins(:responses).distinct
Run Code Online (Sandbox Code Playgroud)

参考:


Ily*_*rov 5

您可以通过查询来执行以下操作join:

Campaign.joins(:responses)
Run Code Online (Sandbox Code Playgroud)

或者通过以下两个查询join:

Campaign.where(id: Response.pluck(:campaign_id))
Run Code Online (Sandbox Code Playgroud)