Редактирование на месте в Rails 3

Существует несколько вариантов редактирования модели на месте на странице "Показать", то есть без необходимости загружать форму на странице "Редактировать". Например, см. http://www.ruby-toolbox.com/categories/rails_in_place_editing.html.

У кого-нибудь есть опыт использования любого из этих параметров (или других) в Rails 3? Любые указатели или советы?

В моем случае у меня довольно длинная форма, состоящая из переменного количества элементов. С точки зрения удобства использования, имеет смысл редактировать текст в этих элементах на той же странице, вместо необходимости кнопки "Редактировать" для каждой, которая отправляет пользователя на страницу редактирования для определенного элемента.

Ответ 1

Отличный вопрос!

  • in_place_editing - создатель dhh, Rails. Он поддерживается основной командой Rails. Таким образом, это, безусловно, нужно изучить.

  • Hobo - это большая структура, которая имеет встроенное редактирование спереди и в центре. Это гладкий пакет, но может быть больше, чем вы хотите или нуждаетесь.

Обновлено для Rails 3 Райан из Railscasts рекомендует Best in Place gem. См. Railscast с образцом кода и дополнительной информацией.

Ответ 2

Конечно, это имеет смысл для меня. Я делаю это все время.

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

Если вы знаете AJAX, это может реально помочь вашему пользовательскому интерфейсу в том, что вашим пользователям даже не придется нажать кнопку "Сохранить".

Чтобы выполнить голый минус этого. Настройте index.html.erb с вашей формой внутри него.

В вашем контроллере вы можете указать свои действия следующим образом:

def update
  @quick_fact = @organization.quick_facts.find(params[:id])
  if @quick_fact.update_attributes(params[:tab])
    flash[:notice] = 'Text Tab was successfully updated.'
    redirect_to quick_facts_organization_path(@organization)
  else
    render :action => "index", :id => params[:id]
 end
end