rails не создает связь между динамически добавленной вложенной формой и родителем - PullRequest
0 голосов
/ 04 января 2011

У меня есть форма «задачи», и я динамически добавляю дочернюю форму «шаги».

'шаги' добавляются посредством вызова JavaScript для рендеринга ('шаги / форма').

Форма загружается нормально, но при отправке формы задач добавленный шаг не заносится в базу данных.

Я предполагаю, что это потому, что я не связываю две формы вместе, но я не совсем уверен.

Мой код Задачи / new.html.erb

<%= form_for @task, :html=>{:multipart=>true} do |f| %>
  <%= f.label :task_name %>
  <%= f.text_field :task_name %>

<%= link_to "Add Step", @step, :remote=>true, :class=>'addStep %>
<%= f.submit %>
<% end %>

<% content_for(:js) do %>
   $('a.addStep').click(function(){
      $('div#newStep').append("<%= escape_javascript(render('steps/form'))%>");
   });
<% end %>

steps / _form.html.erb равен

<p class="fields">
   <%= fields_for :steps do |builder| %>
   <%= builder.label :title %>
   <%= builder.text_field :title %>
<% end %>

Я считаю, что проблема в том, что я не передаю 'f' или 'task' в форму 'step', но я не мог понять, как это сделать.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2016

Возможно, вам придется обновить параметры в родительском контроллере, чтобы включить атрибуты дочернего элемента.например

controllers / task_controller.rb

Class TasksController < ApplicationController
  ...

  def task_params
    params.require(:task).permit :name, :description ,
      steps_attributes: [:step, :step_description, :due_date]
  end
end

models / task.rb

Class Task < ActiveRecord::Base
  has_many :steps
  accepts_nested_attributes_for :steps
end

models / step.rb

Class Step < ActiveRecord::Base
  belongs_to :task
end
0 голосов
/ 04 января 2011

Попробуйте что-то вроде этого:

<%= render :partial => 'steps/form',
             :locals => {:form => f} %>

Надеюсь, это поможет.

Правка - 1

Выполните следующие действия:

<%= form_for @task, :html=>{:multipart=>true} do |f| %>
  <%= f.label :task_name %>
  <%= f.text_field :task_name %>
  <div style="display:none;" id="steps_form">
       <%= render :partial => 'steps/form',
               :locals => {:form => f} %>
  </div>
<%= link_to "Add Step", @step, :onClick=>"js_function_to_change_display_property()", :class=>'addStep' %>
<%= f.submit %>
<% end %>

, затем вы можете использовать простой javascript для просмотра формы шагов, изменив свойство отображения steps_form.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...