我正在尝试使用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
现在,这不能很好地运作......
好吧,很好地实现多对多的好资源答案 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
关联应该是单数。