我有一个rails 4应用程序,其中我基本上this railscast:
_form.html.erb:
<%= form_for @store, do |f| %>
<%= f.fields_for :products do |builder| %>
<%= render "product_fields", f: builder %>
<% end %>
<%= link_to_add_fields "Add Product", f, :products %>
<% end %>
_product_fields.html.erb
<%= f.select :the_product_type, %w[Shelves, Tools, Wires]%>
<div>
<%= f.fields_for :product_fields do |builder| %>
<%= builder.text_area :name_of_product_field %>
<% end %>
</div>
我的JS看起来像:
$('form').on('click', '.add_fields', function(e) {
var regexp, time;
time = new Date().getTime();
regexp = new RegExp($(this).data('id'), 'g');
$(this).before($(this).data('fields').replace(regexp, time));
return e.preventDefault();
});
我的问题是当我点击添加产品按钮时,我只能看到一个选择。我无法看到name_of_product_field textarea。但是,如果我看不到textarea,我无法弄清楚为什么我能看到选择?
答案 0 :(得分:1)
product_fields
是一个嵌套属性,您在代码中的任何位置都没有build
,这就是您没有看到它的原因。
假设产品has_many product_fields ,您可以通过两种方式解决此问题,选择一个适合您的方式:
<强> 1。在控制器级别构建
在呈现有问题视图的product_fields
中构建Controller#action
:
def action_name
@store = Store.new
product = @store.products.build
product.product_fields.build
end
2.在视图级别构建
更新fields_for
中的_product_fields.html.erb
,如下所示:
<%= f.fields_for :product_fields, f.object.product_fields.build do |builder| %>