0

我正在尝试使用 rails 3 中的模型为我的演示应用程序实现多对多关系。
这一切都很好,直到我尝试添加一个模型来保存更多关于关系的数据。
我有一个食谱、成分、成分_食谱模型

文件: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

现在,这不太好用……

哦,很好,非常感谢实现多对多的好资源

4

1 回答 1

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不确定是否只是我的误解。

您遇到的第一个错误说 undefined method recipe_ingredient,这是有道理的,关联名称是ingredient_recipes, through 参数采用关联的确切名称。

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

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

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

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

IncredientRecipe班内

belongs_to :recipe
belongs_to :ingredient

belongs_to关联应该是单数的。

于 2012-06-09T13:56:09.703 回答