Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-活动记录跨3个表连接_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails-活动记录跨3个表连接

Ruby on rails Rails-活动记录跨3个表连接,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,rails-activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Rails Activerecord,对Rails有些陌生,所以我非常感谢你们能提供的任何帮助 无论如何,我有三种模式-投票、午餐和提供商,我希望编写一个活动记录调用来拉: 投票表中的所有数据 午餐桌上的午餐日期 提供程序表中的提供程序名称 投票模型包括午餐id,午餐模型包括午餐id(简称id)和提供者id。提供者模型有提供者id(简称id)。在Rails控制台中,我可以写: v = Vote.joins(:lunch).select("lunches.date,votes.*").where(lunch_id: 1) 这将输

对Rails有些陌生,所以我非常感谢你们能提供的任何帮助

无论如何,我有三种模式-投票、午餐和提供商,我希望编写一个活动记录调用来拉:

  • 投票表中的所有数据
  • 午餐桌上的午餐日期
  • 提供程序表中的提供程序名称
投票模型包括午餐id,午餐模型包括午餐id(简称id)和提供者id。提供者模型有提供者id(简称id)。在Rails控制台中,我可以写:

v = Vote.joins(:lunch).select("lunches.date,votes.*").where(lunch_id: 1)
这将输出投票模型中的所有数据,以及午餐模型中的相关日期。我陷入困境的地方是,我不知道如何“嵌套”它,然后加入到提供者模型中


我认为这可能与“has_many_through”有关,但即使在阅读了文档之后,我也不确定它将如何实现。如果您有任何想法,我们将不胜感激

假设您的所有模型都具有正确的
且定义了许多
属于
关联,则您可以通过向join方法传递散列(而不仅仅是符号)来联接多个表

Vote.joins(lunch: :provider).select('lunches.date, providers.name, votes.*').where(lunch_id: 1)
关于这些的更多信息可以在rails查询接口文档的“使用命名关联的数组/哈希”部分找到


这很有魅力。如果您有第四个表,那么语法会是什么呢?哈希仍然有效吗?因为您现在可能有三个ID要连接,而不仅仅是两个ID?此外,在散列中,:provider是一个符号,但“午餐:”指的是什么?它总是让我在Rails中绊倒,来回切换冒号。使用类似于
午餐::提供者
的东西是
{:午餐=>:provider}
的快捷语法,它只是意味着
:午餐
是一个值为
:provider
的键,同时也是一个符号本身。如果要连接更多的表,可以通过提供嵌套哈希来实现,例如
连接(table1:{table2:{table3::table4})
。我已经用rails文档的链接更新了答案,其中包含了这些技术的其他示例。