Добавление динамических полей в вложенную форму через AJAX

Я просматривал и воспроизводил эти railscasts в своем приложении: 196-nested-model-form-part-1 и 197-nested-model-form-part-2. У меня пока нет учетной записи pro, поэтому я не могу смотреть пересмотренный эпизод.

Я развиваюсь под rails4 (edge) и link_to_function устарел в пользу ненавязчивого JS (что здорово).

Я приведу пример вышеупомянутых railscast (т.е. опрос/вопрос). То, что я хотел бы сделать, состоит в том, чтобы использовать вопрос частично через ненавязчивый javascript, и я просто не знаю, как и где я должен это делать.

Я думал о двух способах сделать это:

  • Первым способом было бы добавить в мой app/assets/javascripts файл surveys.js с помощью функции add_question, но я не вижу, как я мог бы использовать мои частичные здесь.
  • Другим способом было бы создать новое действие в моем SurveyController, которое отвечало бы с использованием частичного вопроса, но меня беспокоит факт наличия действия, специфичного для вопросов в моем контролере опроса.

Я не могу не думать, что должен быть лучший способ сделать это.

Ответ 1

У меня также нет учетной записи pro в Railscasts, но иногда неплохо взглянуть на учетную запись Ryan Github. Зачастую он развивает драгоценные камни, которые он накрыл в своих эпизодах. Там вы найдете этот удивительный nested_form gem, который делает именно то, что вы хотите.

Конечно, вы можете изобрести колесо, но я думаю, что намного проще и быстрее использовать Ryan gem. В документации объясняется, как ее использовать. Получайте удовольствие!

Ответ 2

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

На ваш взгляд:

link_to 'Add question', add_question_path(@survey), remote: true

В вашем контроллере

def add_question
  @survey = Survey.find(params[:id])

  respond_to do |format|
    format.js #add_question.js.erb
  end
end

Последний шаг - создать файловое приложение /views/survey/add _question.js.erb

$('#my_survey').append('<%=j render partial: 'my_question_partial' %>')

Не забудьте создать маршрут для вашего ask_question_path

Подробнее о удаленных ссылках и формах см. ниже: http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs