Подсчет добавленных полей во вложенной форме (кокон)

Я получил вложенную форму, используя гем кокона:

_form.html.haml:

= simple_form_for @day do |f|
  #task
    = f.simple_fields_for :tasks do |task|
      = render 'task_fields', f: task
    .links
      = link_to_add_association '+ Aufgabe', f, :tasks
  = f.submit

_task_fields.html.haml:

.nested-fields
  = f.input :description, label: 'Name/Beschreibung: '
  = f.input :ur, as: :range, input_html: { min: '1', max: '4', id: "rangeInput#{@x}", oninput: "rangeOutput#{@x}.value = rangeInput#{@x}.value"}
  %output#rangeOutput{:for => "rangeInput#{@x}", :name => "rangeOutput#{@x}"} 3

  = link_to_remove_association "remove task", f

days_controller.rb:

def create
  @day = current_user.days.build(day_params)
  @day.save
  respond_to do |format|
    if @day.save
      format.html { redirect_to @day, notice: 'Day was successfully created.' }
      format.json { render :show, status: :created, location: @day }
    else
      format.html { render :new }
      format.json { render json: @day.errors, status: :unprocessable_entity }
    end
  end
end

Мне нужно увеличивать переменную всякий раз, когда отображается _task_fields-partial или нажимается link_to_add_association.


person Max    schedule 03.08.2016    source источник
comment
Не могли бы вы поделиться своим соответствующим кодом контроллера?   -  person nicholas79171    schedule 03.08.2016


Ответы (2)


Создайте миграцию и добавьте столбец :view_count во вложенный атрибут.

В вашем контроллере для nested attribute в методе create добавьте эту строку:

@day.increment!(:view_count) 

Это будет увеличивать 1 каждый раз, когда вызывается метод create. Я не уверен, как вы хотите отобразить число, но в представлении вы можете сделать это:

<%= @day.view_count %>

Или вы можете использовать @day.tasks.count, который даст вам счет.

person Gurmukh Singh    schedule 03.08.2016
comment
Я думал, что метод создания вызывается только один раз при нажатии кнопки отправки, но мне нужно увеличивать переменную каждый раз, когда нажимается link_to_add_association - person Max; 03.08.2016
comment
После того, как вы нажмете кнопку link_to_add_association, следующим делом будет создание вложенного значения, поэтому будет вызван метод создания, который даст вам количество вложенных значений. - person Gurmukh Singh; 03.08.2016
comment
Я думаю, вы меня неправильно поняли, мне нужна эта переменная до того, как будет нажата кнопка отправки, и до того, как это произойдет, метод создания не будет вызываться. - person Max; 03.08.2016

В зависимости от ваших потребностей вы можете просто решить это в css. Итак, если вы хотите отобразить номер строки/элемента, но на самом деле номер не имеет отношения к вам, вы можете сделать что-то вроде: Автоматическая нумерация строк таблицы?

В противном случае вам нужно будет использовать обратные вызовы js, где при вставке или удалении вы можете вычислить и отобразить число. Например, вы можете использовать это, чтобы ограничить максимальное количество разрешенных вложенных элементов: https://github.com/nathanvda/cocoon/wiki/How-to-limit-the-number-of-nested-fields

person nathanvda    schedule 04.08.2016