Редактирование на месте в 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