1

我正在尝试编辑模型的嵌套属性,就像此处的大纲一样,在此处复制:

    <%= form_for @person do |person_form| %>
      <%= person_form.text_field :name %>
      <% for address in @person.addresses %>
        <%= person_form.fields_for address, :index => address do |address_form|%>
          <%= address_form.text_field :city %>
        <% end %>
      <% end %>
    <% end %>

在我的代码中,我有以下内容:

<%= form_for(@meal) do |f| %>
  <!-- some other stuff that's irrelevant... -->

      <% for subitem in @meal.meal_line_items %>
         <!-- # Edit 2: I need to display information here about the subitem
              Which I can't find a way to pass it to the partial, or work in 
              this manner for existing items
         -->
         <%= subitem.food.name %>
         <%= subitem.food.calories %>

         <%= f.fields_for subitem, :index => subitem do |line_item_form| %>
            <%= line_item_form.label :servings %><br/>
            <%= line_item_form.text_field :servings %><br/>
            <%= line_item_form.label :food_id %><br/>
            <%= line_item_form.text_field :food_id %><br/>
         <% end %>
      <% end %>

      <%= f.submit %>
<% end %>

这很好用,除了当我查看 HTML 时,它正在创建如下所示的输入,未能输入正确的 id 而是放置模型的内存表示(?)。结果,更新失败:

<input type="text" value="2" size="30" name="meal[meal_line_item][#<MealLineItem:0x00000005c5d618>][servings]" id="meal_meal_line_item_#<MealLineItem:0x00000005c5d618>_servings">

编辑: 我试图在这种方法中这样做的原因是我需要收集一些关于现有meal_line_items 关联的信息。例如,在我取出代码的区域,我有一些代码的效果是:

<%= subitem.food.name %>
<%= subitem.food.calories %>

如果我使用带有部分的表单生成器,至少在我的试验中不会,获取此信息将不起作用。

编辑 2:* 请参阅代码中的编辑。这是我的 MealLineItem

class MealLineItem < ActiveRecord::Base
  # Associations ---------------------
  belongs_to :food
  belongs_to :meal
end

并为模型吃接受嵌套的属性。如您所见,它属于食物和膳食模型。对于现有的 meal_line_item 我需要执行以下操作:

meal_line_item.food.name
4

3 回答 3

3

有没有f.遗漏<%= fields_for

- 编辑

你有没有尝试过:

<%= f.fields_for 'meal[meal_line_item][]', subitem do |line_item_form| %>

- 编辑

文档说它也应该在没有循环的情况下工作:

<%= form_for(@meal) do |f| %>
  <!-- some other stuff that's irrelevant... -->

  <%= f.fields_for :meal_line_items do |line_item_form| %>
    <%= line_item_form.label :servings %><br/>
    <%= line_item_form.text_field :servings %><br/>
    <%= line_item_form.label :food_id %><br/>
    <%= line_item_form.text_field :food_id %><br/>
  <% end %>

  <%= f.submit %>
<% end %>
于 2011-01-05T07:51:28.363 回答
1

必须对此进行测试,但也许是这种方法?

_形式

<%= form.fields_for :meal_line_items do |meal_line_item_form| %>
 <% @meal.meal_line_items.each do |meal_line_item| %>
  <%= render :partial => "meal_line_items/meal_line_item", :locals => { :meal_line_item_form => meal_line_item_form, :meal_line_item => meal_line_item } %>
 <% end %>
<% end %>

meal_line_items/_meal_line_item.erb

<%= meal_line_item_form.label :servings %><br/>
<%= meal_line_item_form.text_field :servings %><br/>
<%= meal_line_item_form.label :food_id %><br/>
<%= meal_line_item_form.text_field :food_id %><br/>

编辑

这是一个直接设置formbuilder迭代器的示例的链接(尽管是Rails 2.3.8)。Outbreak -> Incidents -> Location 之间的关联应该与 Meal -> Meal_line_items -> Food 之间的关联相似。

Accepts_nested_attributes_for partials 的 AJAX 更新

于 2011-01-05T14:51:04.903 回答
0

经过高低搜索,我发现了错误。虽然我正在修改部分并收到 NameError ,但这是因为我从辅助方法调用部分 - 与以下问题中所述的问题完全相同:

rails fields_for 渲染局部,多个局部变量产生未定义的变量

于 2011-01-05T16:29:22.787 回答