3

Rails有点新,所以我很感谢你们提供的帮助。Rails - Active Record加入3个表格

不管怎么说,我有三个型号 - 投票,午餐,和供应商,我期待编写一个活动记录呼叫拉:在投票表

    • 所有数据在午餐桌上
    • 在供应者表

    投票模型提供者的名称包括lunch_id午餐日期,午餐模型包括lunch_id(就叫ID)和PROVIDER_ID。提供者模型具有PROVIDER_ID(只是叫做ID)在Rails的控制台,我可以这样写:

    v = Vote.joins(:lunch).select("lunches.date,votes.*").where(lunch_id: 1) 
    

    ,并输出在投票模型中的所有数据,加上从午餐模型相关联的日期。我被卡住的地方是我不知道如何“嵌套”这个,然后加入到提供者模型中。

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

  • 回答

    4

    假设您的所有模型都有正确的has_manybelongs_to关联定义,您可以通过将哈希传递给联接方法而不仅仅是一个符号来联接多个表。

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

    有关这些的更多信息可以在rails查询inferface文档的'Using Array/Hash of Named Associations'部分找到。

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

    +0

    这就像一个魅力。如果你有第四个表格,那么语法会是什么呢?如果一个哈希表仍然有效,你现在有三个ID可以加入,而不仅仅是两个? 另外,在哈希中,提供者是一个符号,但什么是“午餐:”被称为?它总是让我在Rails中出现,并且来回切换冒号。 – sulleh

    +0

    使用'lunch :::provider'这样的东西是'{:lunch =>:provider}'的快捷语法,它仅仅意味着':lunch'是一个值为':provider'的键,同时也是一个符号本身。如果你要加入更多的表,你可以通过提供嵌套散列来实现,例如'join(table1:{table2:{table3::table4}})'。我已经更新了包含这些技术的其他示例的rails文档链接的答案。 –

    +0

    非常有帮助,谢谢! – sulleh