Ruby on rails RAILS:在嵌套的部分表单中调用父模型
我试图在“变量”部分调用“产品”模型中的变量。我可以使用以下方法从“variant”调用现有变量: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
<%= 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不起作用。我似乎无法把任何东西传递给分部!在部分中,您应该将对象引用为产品。只是确定你在做什么。