【问题标题】: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 } 结尾 结尾

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

【问题讨论】:

    标签: ruby-on-rails join


    【解决方案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]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2015-08-16
      相关资源
      最近更新 更多