rails - 使用模型显示多对多

时间:2012-06-09 12:08:49

标签: ruby-on-rails ruby-on-rails-3

我正在尝试使用rails 3中的模型为我的演示应用程序实现多对多的关系 这一切都运行良好,直到我试图添加一个模型,将在关系上保存更多的数据 我有配方,成分,Ingredient_Recipe模型

档案:ingredient_recipe.rb

class IngredientRecipe < ActiveRecord::Base
  attr_accessible :created_at, :ingredient_id, :order, :recipe_id
  belongs_to :recipes
  belongs_to :ingredients
end

文件:ingredient.rb

class Ingredient < ActiveRecord::Base
 has_many :ingredientRecipe
 has_many :recipes, :through => :ingredientRecipe
 ...

文件:recipes.rb

 class Recipe < ActiveRecord::Base
  has_many :ingredientRecipe
  has_many :ingredients, :through => :ingredientRecipe
  ...

 <td >
  <% @recipe.ingredients.each do |ingredient| %>
   ingredient.name
  <% end %>
 </td >

 ingredient_id, recipe_id, order, created_at, updated_at

现在,这不能很好地运作......

好吧,很好地实现多对多的好资源

1 个答案:

答案 0 :(得分:1)

我在模型代码中看到一些错误。很难准确地说出那些可能做的事情。

您的食谱模型应如下所示:

has_many :ingredient_recipes
has_many :ingredients, :through => :ingredient_recipes

您的配料模型应如下所示

has_many :ingredient_recipes
has_many :recipes, :through => :ingredient_recipes 

应该强调关联,低级别,has_many关系应该是多元化的。

您说Ingredient_Recipe包含,内容很好,但应该命名为ingredient_recipe.rb,类名应该IngredientRecipe不确定这是否只是我的误解。

您遇到的第一个错误是未定义的方法recipe_ingredient,这有意义,关联名称为ingredient_recipes,直通参数采用关联的确切名称。

第二个问题很难说,但我会首先进行上述修改,看看是否能改善这种情况。

第三项,我会说不。按照railscast的说明进行操作。

有问题的有轨电视是一个很好的资源,我以前使用过那个特定的资源。

编辑,注意到belongs_to也不正确。

IncredientRecipe

belongs_to :recipe
belongs_to :ingredient

belongs_to关联应该是单数。