Rails-跨3个表的Active Record连接

sul*_*leh 5 ruby activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord

对Rails来说有些陌生,因此,感谢您提供的任何帮助。

无论如何,我有三种模型-投票,午餐和提供者,并且我希望编写一个Active Record调用来提取:

  • 投票表中的所有数据
  • 午餐表中的午餐日期
  • 提供者表中的提供者名称

投票模型包括Lunch_id,午餐模型包括Lunch_id(仅称为ID)和provider_id。Provider模型有一个provider_id(仅称为id)。在Rails控制台中,我可以编写:

v = Vote.joins(:lunch).select("lunches.date,votes.*").where(lunch_id: 1)
Run Code Online (Sandbox Code Playgroud)

并输出“投票”模型中的所有数据以及“午餐”模型中的关联日期。我遇到的困难是我不知道如何“嵌套”这个然后再加入提供者模型。

我想这可能与“ has_many_through”有关,但是即使阅读了文档,我也不确定如何实现。这里的任何想法将不胜感激!

Ale*_*a Y 5

假设所有模型都定义了正确的模型has_manybelongs_to关联,则可以通过将散列传递给join方法(而不仅仅是符号)来加入多个表。

Vote.joins(lunch: :provider).select('lunches.date, providers.name, votes.*').where(lunch_id: 1)
Run Code Online (Sandbox Code Playgroud)

关于这些的更多信息,可以在rails查询接口文档的“使用命名关联的数组/哈希”部分中找到。

http://guides.rubyonrails.org/active_record_querying.html#using-array-hash-of-named-associations