Rails按has_and_belongs_to_many属性过滤

时间:2011-06-21 16:07:03

标签: ruby-on-rails ruby

我有点问题!我有一个Place模型和一个Category模型,它们通过has_and_belongs_to_many连接。我希望能够过滤掉属于给定数组中至少一个类别的所有位置(int的int数组)。到目前为止,我只能使用以下代码过滤单个类别:

@places = Place.find(:all, :include => :categories, :conditions => { "categories_places.category_id" => id})

所以基本上不是id我想要ID。我希望这里有一些铁道专家可以提供帮助!我对此很陌生。

4 个答案:

答案 0 :(得分:3)

这应该很好地解决了这个问题。

some_array_of_ids = [1, 2, 3]
@places = Place.find(:all, :include => :categories, :conditions => ['categories.id IN (?)', some_array_of_ids)

答案 1 :(得分:0)

尝试:

@places = Place.find(:all, :include => :categories, :conditions => ["categories_places.category_id IN ?", int])

其中int - 你的数组

答案 2 :(得分:0)

或者如果你想在链接范围内

some_array_of_ids = [1,2,3]
@places = Place.includes(:categories).where('categories.id IN (?)', some_array_of_ids)

答案 3 :(得分:0)

在Rails5中可以是这样:

some_array_of_ids = [1,2,3]
@places = Place.joins(:categories).where('categories.id': some_array_of_ids)

我在模型中使用scope

scope :by_categories, ->(category_ids) { joins(:categories).where('categories.id': category_ids) }

因此,您可以通过以下方式选择places

some_array_of_ids = [1,2,3]
@places = Place.by_categories(some_array_of_ids)