Ruby on Rails 3, формы, ajax, вложенные, редактирование на месте, по одному.Лучшая практика - PullRequest
1 голос
/ 12 февраля 2011

Предположим, что у меня есть сложная вложенная форма со многими полями.

Я хочу редактировать ее поля по одному в ajax так, чтобы каждый раз, когда я вижу форму - она ​​находилась в 'show'style (без полей для изменения информации), но с возможностью переключения любого конкретного поля или группы полей в режим "edit" с помощью собственной кнопки "save" или "update".

Решение проблемы такого родаЯ закончил двумя способами:

  1. Расширенное использование сложных форм-примеров Райана Бейтса .
    Недостатком этого способа является то, что каждое поле(или группа полей) требует свой собственный код (то есть javascript: 'insert_fields'), который отображает соответствующую форму стиля 'edit', поэтому в результате страница перегружается javascripts.

  2. Второе - это унифицированная процедура загрузки соответствующих партиалов редактирования через ajax через специальное действие контроллера (т.е. get_partial), которое «рендерит: обновляет» область данного поля с помощью формы «edit».
    Для данного поля или группы полей iесть части для «редактирования» и «шоу».Когда мне нужно переключить это поле в режим редактирования, я отправляю запрос (link_to ...,'/.../get_partial?partial=foo',:remote => true) с необходимыми параметрами с помощью ajax, и некоторые действия контроллера # визуализируют это частичное с помощью javascript.

Я думаю, чтоВторой подход лучше, но я не могу понять, как лучше его оптимизировать.

Есть ли более элегантные решения этой проблемы?

1 Ответ

0 голосов
/ 12 февраля 2011

Что делать, если вы сгенерировали обычную форму редактирования (со всеми вложенными полями и т. Д.), А затем заставили javascript скрыть поля и добавить текст поля и ссылку редактирования рядом с ним.Например, скажите, что ваша форма выглядит следующим образом:

= form_for @foo do |f|
  = f.text_field :name

, и ваш javascript сделает это с ней (1):

= form_for @foo do |f|
  = f.text_field :name, :class => "hide"
  <the value of the field here>
  = link_to "edit", "#"

, а затем заставьте свой javascript добавить событие click для редактирования.ссылки, которые при нажатии делают:

= form_for @foo do |f|
  = f.text_field :name
  = f.submit "Save"

, тогда вам потребуется больше javascript, который заставляет кнопку сохранения отправить форму (ajax) и вернуться к пункту (1) выше

...