我有点问题!我有一个Place模型和一个Category模型,它们通过has_and_belongs_to_many连接。我希望能够过滤掉属于给定数组中至少一个类别的所有位置(int的int数组)。到目前为止,我只能使用以下代码过滤单个类别:
@places = Place.find(:all, :include => :categories, :conditions => { "categories_places.category_id" => id})
所以基本上不是id我想要ID。我希望这里有一些铁道专家可以提供帮助!我对此很陌生。
答案 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)