如何拒绝存在特定条件的AR协会

时间:2018-12-19 01:03:31

标签: ruby-on-rails ruby

我想从以下关联中删除项目(site_placement具有native_ad_placement.ad_type ==“ video”),并具有以下代码,但这似乎不起作用

# not an array but an association
@sites.each do |site|
  site.site_placements.reject { |sp| (sp.native_ad_placement.ad_type == "video") }
end

我该如何实现?我正在使用Rails 3.2。

1 个答案:

答案 0 :(得分:2)

您应该使用.reject!而不是.reject

但实际上,您根本不应该使用拒绝。如果我没有记错的话,您可以在查询级别完全实现相同的目的,并且效率更高。如下所示:

Site.includes(site_placements: [: native_ad_placement]).where.not(native_ad_placements: { ad_type: "video" })