通过Rails中关联模型的属性进行过滤

时间:2015-04-19 03:29:20

标签: ruby-on-rails

我在视图中使用以下行,输出电影的英文说明:

@film.descriptions.where(language_id: 38)

有没有办法写这个并不依赖于知道语言记录的ID?我一直在寻找,但我自己还没想到。在这种情况下,英文描述的ID恰好为38,但我并不是硬编码ID。

有一个电影模型,其中有很多描述,描述属于语言。语言模型有一个'代码'属性(en,de等),看起来使用语言代码而不是模型ID查找电影的描述会更清晰。

谢谢!

3 个答案:

答案 0 :(得分:0)

是的,你可以这样做。

film模型编写辅助方法,如

def language(code)
   Language.where(code:code).first.id
end

获取电影描述:

@film.descriptions.where(language_id: language('en'))

答案 1 :(得分:0)

您可以按照以下方式尝试

@film.descriptions.joins(:language).where(language: {code: "en"})

它将返回描述语言具有“en”代码

的flims

答案 2 :(得分:0)

重写如下:

Description.joins(:language)
  .where(film_id: @film, languages: {code: "en"})