Html 嵌套表单呈现问题
我有一个rails 4应用程序,其表单如下所示:Html 嵌套表单呈现问题,html,ruby-on-rails,ruby,forms,Html,Ruby On Rails,Ruby,Forms,我有一个rails 4应用程序,其表单如下所示: <%= form_for @store, :html => {:multipart => true} do |f| %> <%= f.fields_for :products do |product| %> <%= render partial: "edit_product_fields", locals: {product:product} %> <% end %>
<%= form_for @store, :html => {:multipart => true} do |f| %>
<%= f.fields_for :products do |product| %>
<%= render partial: "edit_product_fields", locals: {product:product} %>
<% end %>
<%= f.submit %>
<% end %>
<select>
<option value="Textbook" <% if product.type_of == "Textbook" %>selected<% end %>>Textbook</option>
<option value="Magazine" <% if product.type_of == "Magazine" %>selected<% end %>>Magazine</option>
<option value="Book" <% if product.type_of == "Book" %>selected<% end %>>Book</option>
</select>
{:multipart=>true}do | f |%>
“编辑产品”部分字段如下所示:
<%= form_for @store, :html => {:multipart => true} do |f| %>
<%= f.fields_for :products do |product| %>
<%= render partial: "edit_product_fields", locals: {product:product} %>
<% end %>
<%= f.submit %>
<% end %>
<select>
<option value="Textbook" <% if product.type_of == "Textbook" %>selected<% end %>>Textbook</option>
<option value="Magazine" <% if product.type_of == "Magazine" %>selected<% end %>>Magazine</option>
<option value="Book" <% if product.type_of == "Book" %>selected<% end %>>Book</option>
</select>
教科书
杂志
书
当我有这样的代码时,我会得到错误:
undefined method `type_of' for #<NestedForm::Builder:0x00000102304f78>
undefined local variable or method `product' for #<#<Class:0x0000010235a248>:0x0000010684b3c0>
未定义的方法'type_of'#
但是如果我将渲染线更改为(我只是通过去掉部分:,使其不那么清晰):
我得到一个错误:
undefined method `type_of' for #<NestedForm::Builder:0x00000102304f78>
undefined local variable or method `product' for #<#<Class:0x0000010235a248>:0x0000010684b3c0>
未定义的局部变量或方法“product”#
在您的第一个代码块中,有一个Builder
对象存储为product
幸运的是,Builder
提供了一个object
方法,因此您可以访问它在表单中表示的实际对象:
<select>
<option value="Textbook" <%= 'selected' if product.object.type_of == "Textbook" %>>Textbook</option>
<option value="Magazine" <%= 'selected' if product.object.type_of == "Magazine" %>>Magazine</option>
<option value="Book" <%= 'selected' if product.object.type_of == "Book" %>>Book</option>
</select>
教科书
杂志
书
在您的第一个代码块中,有一个Builder
对象存储为product
幸运的是,Builder
提供了一个object
方法,因此您可以访问它在表单中表示的实际对象:
<select>
<option value="Textbook" <%= 'selected' if product.object.type_of == "Textbook" %>>Textbook</option>
<option value="Magazine" <%= 'selected' if product.object.type_of == "Magazine" %>>Magazine</option>
<option value="Book" <%= 'selected' if product.object.type_of == "Book" %>>Book</option>
</select>
教科书
杂志
书
那么类型的\u不是ruby方法。这看起来像是一次打字检查。。。但是在duck类型的语言中,类型检查通常是不受欢迎的。无论如何,我们可以利用一个,而不是使这段代码成为一行程序。但是首先
更改后,render
抱怨未定义的局部变量或方法
product'`的原因是,render调用期望第一个参数为局部名称,第二个参数为局部散列:
<%= render "partial_name", local1: "a", local2: "b" %>
嗯
的类型不是ruby方法。这看起来像是一次打字检查。。。但是在duck类型的语言中,类型检查通常是不受欢迎的。无论如何,我们可以利用一个,而不是使这段代码成为一行程序。但是首先
更改后,render
抱怨未定义的局部变量或方法
product'`的原因是,render调用期望第一个参数为局部名称,第二个参数为局部散列:
<%= render "partial_name", local1: "a", local2: "b" %>
我想知道这块宝石保养得怎么样。上次我尝试使用嵌套表单时,它对我不起作用。所以我选择了
cocoon
gem@WaliAli我不认为OP在这里指的是一个gem,只是嵌套属性的概念。你可能是对的。我想知道这个gem维护得有多好。上次我尝试使用嵌套表单时,它对我不起作用。所以我选择了cocoon
gem@WaliAli我不认为OP在这里指的是gem,只是嵌套属性的概念。@pdobb您可能是对的。谢谢您的回复。我尝试了这个,但是得到了#的未定义的方法类型,正如我指出的,请尝试product.object.class.name
或product.object.is\u?教科书
而不是
类型。我甚至不确定Ruby或Rails中是否存在type\u的<代码>类型\u of
是我的产品模型中的一个字段。这段代码没有给我一个错误,但是对于select,我试图说“如果product.type_of等于教科书,那么将其选中”。我应该说得更清楚,抱歉,没问题。我还以为你是想把JavaScripttypeof
和Ruby混合在一起呢非常感谢你的回答和解释!谢谢你的回复。我尝试了这个,但是得到了#
的未定义的方法类型,正如我指出的,请尝试product.object.class.name
或product.object.is\u?教科书
而不是
类型。我甚至不确定Ruby或Rails中是否存在type\u的<代码>类型\u of
是我的产品模型中的一个字段。这段代码没有给我一个错误,但是对于select,我试图说“如果product.type_of等于教科书,那么将其选中”。我应该说得更清楚,抱歉,没问题。我还以为你是想把JavaScripttypeof
和Ruby混合在一起呢非常感谢你的回答和解释!我应该说得更清楚些type\u of
实际上是我的产品模型中的一个字段。对不起,我将更改我的问题以反映这一点。这是一个更好的方法,但应该是
。那我想你赢了@Pdobb,非常感谢您的回答和解释!我应该说得更清楚些type\u of
实际上是我的产品模型中的一个字段。对不起,我将更改我的问题以反映这一点。这是一个更好的方法,但应该是
。那我想你赢了@Pdobb,非常感谢您的回答和解释!