我正在构建一个食谱应用程序,用户可以在其中查看食谱,列出食材,获取购物清单等。
每个食谱都是由步骤组成,每一步都有成分,每种食材都有杂货。
我很确定创建这些链接的方法是通过模型,所以我的模型看起来像这样
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
我在正确的地方寻找错误吗?或者我误解了错误??
答案 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插件执行此操作。但需要注意的是 - 您链接的越多,数据库命中的速度就越慢,越复杂。祝你好运!