Часть формы не показывает проблему

0

У меня есть приложение rails 4, где я следую в основном этому 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. Но я не могу понять, почему я вижу выбор, если я не вижу текстовое поле?

  • 0
    это проблема html ?
  • 0
    Каждый продукт имеет много product_fields ? Кроме того, вы должны взглянуть на жемчужину cocoon , она должна сделать вашу жизнь проще - не слишком легкой, хотя вы хотите здесь вложенных ассоциаций. (Не знаю, рекомендуется ли это в скринкасте, так как это премиум, но по комментариям это не так)
Показать ещё 1 комментарий

1 ответ

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 как _product_fields.html.erb ниже:

<%= f.fields_for :product_fields, f.object.product_fields.build do |builder| %>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню