使用rails 4,如何在父表单中深度嵌套资源

时间:2015-03-31 04:41:17

标签: ruby-on-rails has-many-through

编写食谱应用程序。有一段时间可以解决这个问题。

我的模特:

配方

  • has_many:recipe_ingredients
  • has_many:成分,通过:: recipe_ingredients

Recipe_Ingredient

  • belongs_to:recipe
  • belongs_to:成分

成分

  • has_many:recipe_ingredients,:dependent => :破坏
  • has_many:食谱,通过:: recipe_ingredients

我的路线很简单

资源:食谱//和少数随机其他

在我的食谱控制器中:

def new
    @recipe = Recipe.new
    recipe_ingredients = @recipe.recipe_ingredient.build
    recipe_ingredients.ingredient.build
end

我的食谱表格:

<%= simple_form_for @recipe do |r| %>

<%= r.input :title, label: 'Recipe Name:' %>
<%= r.input :description, label: 'Recipe Description' %>

<%= r.simple_fields_for :recipe_ingredients do |ri| %>
  <%= ri.input :quantity, label: "Quantity" %>
  <%= ri.simple_fields_for :ingredients do |i| %>
      <%= i.input :name, label: "name" %>
  <% end %> 
<% end %> 
<%= r.button :submit %>
<% end %>

不确定我做错了什么。错误是:

undefined method `recipe_ingredient' for #<Recipe:0x000001034d3650>

任何想法?花了2个晚上。

1 个答案:

答案 0 :(得分:0)

特定错误似乎来自引用@recipe.recipe_ingredient(单数),它应该是复数,因为它是has_many关系。在RecipeController#new

中试试这个
recipe_ingredients = @recipe.recipe_ingredients.build

然后,对于recipe_ingredients.ingredient,请尝试使用build_association代替:

recipe_ingredients.build_ingredient