rails中的多个连接

时间:2010-10-19 03:22:54

标签: ruby-on-rails join

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

每个食谱都是由步骤组成,每一步都有成分,每种食材都有杂货。

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

class Recipe < ActiveRecord::Base
    has_many :steps,    :dependent => :destroy
    has_many :ingredients, :through => :steps
    has_many :groceries, :through => :ingredients
end

class Step < ActiveRecord::Base
  belongs_to :recipe
  has_many :ingredients, :dependent => :destroy
  has_many :groceries, :through => :ingredients
  accepts_nested_attributes_for :ingredients
end

class Ingredient < ActiveRecord::Base
    belongs_to :step
    belongs_to :recipe
    has_one :grocery
end

class Grocery < ActiveRecord::Base
    has_and_belongs_to_many :ingredients
        has_and_belongs_to_many :steps, :through => :ingredients
        has_and_belongs_to_many :recipes, :through => :ingredients
end

我可以输出debug @ recipe.steps,@ recipe.ingredients,但@ recipe.groceries返回

uninitialized constant Recipe::Grocery

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

控制器只是

def show
    @recipe = Recipe.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @recipe }
    end
  end

我在正确的地方寻找错误吗?或者我误解了错误??

1 个答案:

答案 0 :(得分:4)

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

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

快速回答是您可以使用nested_has_many_through插件执行此操作。但需要注意的是 - 您链接的越多,数据库命中的速度就越慢,越复杂。祝你好运!