导轨中的多个连接

Posted

技术标签:

【中文标题】导轨中的多个连接【英文标题】:multiple joins in rails 【发布时间】:2011-04-27 06:41:45 【问题描述】:

我正在构建一个食谱应用程序,用户可以在其中查看食谱、列出成分、获取购物清单等。

每个食谱都是由步骤组成的,每个步骤都有配料,每个配料都有一个杂货店。

我很确定创建这些链接的方法是通过模型,所以我的模型看起来像这样

类配方 :destroy has_many :ingredients, :through => :steps has_many :groceries, :through => :ingredients 结尾 类步骤 :destroy has_many :groceries, :through => :ingredients 接受嵌套属性:成分 结尾 类成分 :ingredients has_and_belongs_to_many :recipes, :through => :ingredients 结尾

我可以输出调试@recipe.steps、@recipe.ingredients,但@recipe.groceries 返回

未初始化的常量 Recipe::Grocery

我认为这是连接的问题,但我不明白为什么需要在控制器中指定连接。

控制器很简单

定义显示 @recipe = Recipe.find(params[:id]) respond_to 做 |格式| format.html # show.html.erb format.xml 渲染 :xml => @recipe 结尾 结尾

我是否在正确的地方寻找我的错误?还是我误解了错误??

【问题讨论】:

【参考方案1】:

实际上,我不久前写了一篇关于此的博客文章。问题是你不能在 Rails 中菊花链 has_many :through 关联。这是我解释它的文章的链接:

http://kconrails.com/2010/01/28/nesting-has_many-through-relationships-in-ruby-on-rails/

快速回答是您可以使用nested_has_many_through 插件来执行此操作。不过,请注意 - 链接在一起的次数越多,数据库命中的速度就越慢且越复杂。祝你好运!

【讨论】:

您好 Jaime,很抱歉延迟回复。当我第一次问这个问题时,我正在旅行,并且几天没有互联网。然后,当我终于重新上线时,我正在做一个不同的项目。我刚回到这个。无论如何,是的,你得到了信任,尽管我曾希望有一个更好的解决方案。很高兴了解这些限制。 @jaime 您的链接不再有效。你有新的吗?【参考方案2】:

如果我正确理解您的问题,您可以通过级联连接解决您的问题,例如

entries = Recipe.joins(step: [ingredient: [:grocery]])

【讨论】:

以上是关于导轨中的多个连接的主要内容,如果未能解决你的问题,请参考以下文章

急切的加载未加载到导轨中

带有导轨的离子中的CORS问题

导轨中的三重嵌套模型形式显示错误

如何更改动作电缆导轨中的 ping 间隔

导轨视图中的多组单选按钮

无法识别 ubuntu 终端中的导轨,但在 aptana 终端中