Ruby on rails RAILS:在嵌套的部分表单中调用父模型

Ruby on rails RAILS:在嵌套的部分表单中调用父模型,ruby-on-rails,ruby-on-rails-3,nested-forms,Ruby On Rails,Ruby On Rails 3,Nested Forms,我试图在“变量”部分调用“产品”模型中的变量。我可以使用以下方法从“variant”调用现有变量: <%= f.object.product_id %> 但我不能让它工作: <%= f.object.product.id %> 我可以这样做: <%= f.object.product %> 但是它返回#,我不知道该怎么处理它 以下是更详细的情况概述: 我有“商店”模式,有很多“产品”。每个“产品”都有许多“变体”。变量是嵌套的。下面是“/s

我试图在“变量”部分调用“产品”模型中的变量。我可以使用以下方法从“variant”调用现有变量:

 <%= f.object.product_id %>

但我不能让它工作:

<%= f.object.product.id %>

我可以这样做:

<%= f.object.product %>

但是它返回
#
,我不知道该怎么处理它

以下是更详细的情况概述:

我有“商店”模式,有很多“产品”。每个“产品”都有许多“变体”。变量是嵌套的。下面是“/store/show.html.erb”文件:

  <% @store.products.each do |product| %>
    <tr>
      <td>
        <%= form_for(product) do |f| %>
          <%= f.fields_for :variants do |builder| %>
            <%= render 'variant_fields', f: builder %>
          <% end %>
      </td>
    </tr>
  <% end %>

下面是“/store/\u variant\u fields”部分:

<fieldset>
    </table>
       <tbody>
          <tr>
             <td><%= f.label :variant_name %><%= f.text_field :variant_name %></td>         
         </tr>
      </tbody>
    </table>
</fieldset>

最简单的解决方案是将产品传递给您的客户:

<% render 'variant_fields', f: builder, product: f.object %>
<fieldset>
    </table>
       <tbody>
          <tr>
             <td><%= f.label :variant_name %><%= f.text_field :variant_name %><%= product.inspect %></td>         
          </tr>
       </tbody>
     </table>
</fieldset>

在你的部分:

<% render 'variant_fields', f: builder, product: f.object %>
<fieldset>
    </table>
       <tbody>
          <tr>
             <td><%= f.label :variant_name %><%= f.text_field :variant_name %><%= product.inspect %></td>         
          </tr>
       </tbody>
     </table>
</fieldset>


查看product.inspect向您展示的产品。

当您调用
id
时会发生什么?它是否返回nil?当我调用'f.object.product.id'时,我得到一个运行时错误:“为nil调用id,它将错误地为4——如果您真的想要nil的id,请使用object_id”我如何在部分:'product.id'中访问它?我还是不能让它工作。它告诉我这是一个“未定义的局部变量或方法'product'。我已更新了答案。我错误地认为产品仍然在父窗体的范围内。我相信
f.object
仍将在范围内。你能检查一下吗?产品:f.object不起作用。我似乎无法把任何东西传递给分部!在部分中,您应该将对象引用为产品。只是确定你在做什么。