ActiveRecord:如何"选择"在has_many通过关联?

时间:2014-03-13 14:07:57

标签: ruby-on-rails activerecord

我有一个Word对象,通过WordCategories具有很多类别

我想获得与传递的类别ID有关系的单词列表。

在sql中我会写

select * from words where category_id = (1,2,3,4)

是否可以这样做,但仍然会带回Word对象?

修改

我上面的例子不正确。我有3个模型,

  • 分类
  • 词典

Word有许多词典,并通过词典进行分类 类别有很多词典,词典也有词典 字典属于Word和Dictionary

2 个答案:

答案 0 :(得分:1)

您可以按如下方式加入这三个模型:

Word.joins(word_categories: :category).where(category: { id: [1, 2, 3, 4] })

或加入wordword_categories并在where子句中使用word_categories.category_id作为:

Word.joins(:word_categories).where(word_categories: { category_id: [1, 2, 3, 4] })

答案 1 :(得分:0)

ActiveRecord的where可以获取一系列ID并搜索:

def self.with_category_ids(category_ids_array)
  where(:category_id => category_ids_array)
end

将是一个类方法,它返回Wordcategory_idin的所有category_ids_array个对象。