Редактирование Локальной Формы

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

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

Решение Реализация локального редактирования в Rails довольно проста, если вы используете элемент управления InPlaceEditor, принадлежащий библиотеке script.aculo.us, и сопровождающие его вспомогательные методы.

Давайте сразу перейдем к делу и проверим все это на практике.

Нам необходимо создать модель и контроллер, с помощью которого будет проводиться демонстрация.

Чтобы долго не наматывать, воспользуемся леской.

В созданном проекте пусть это будут Контакты (обычная адресная книга).

Пишем в консоли: #script/generate контакты scaffold имя:строка адрес электронной почты:строка телефон:строка адрес_строка1:строка адрес_строка2:строка город: строка страна: строка postal_code: строка Теперь давайте запустим скрипт/сервер , перейти по адресу _http:// локальный хост: 3000/контакты/ и добавьте один или два контакта.

Нажмите на ссылку Показывать в одном из контактов, которые вы только что добавили.

Появится обычная страница, содержащая подробную информацию о выбранном контенте.

Именно на этой странице мы собираемся добавить возможность локального редактирования.

Первый шаг при включении Ajax — убедиться, что все необходимые файлы JavaScript включены в представление.

Я обычно помещаю его в макет по умолчанию - просмотры/макеты/contacts.html.erb <%= javascript_include_tag :defaults %> Далее нам понадобится сам плагин; ветка Rails 2.0 его не включает. Пишем в консоли установка скрипта/плагина _http:// svn.rubyonrails.org/rails/plugins/in_place_editing Откройте файл в редакторе приложение/views/contacts/show.html.erb .

Будет Имя: <%=h @contact.name %> Электронная почта: <%=h @contact.email %> Телефон: <%=h @contact.phone %> .

Изменить на Имя: <%= in_place_editor_field :contact, :name, {}, :rows => 1 %> Электронная почта: <%= in_place_editor_field :contact, :email, {}, :rows => 1 %> Телефон: <%= in_place_editor_field :contact, : телефон , {}, :rows => 1 %> .



Редактирование локальной формы

Временная платформа Поэтому мы добавили в поля локальные инструменты редактирования.

Обратите внимание, что в методе in_place_editor_field() ожидает, что в качестве первого параметра будет использоваться имя экземпляра переменной, а не сам экземпляр (именно поэтому используется :contact, а не @contact).

После обновления эта красота появится.



Редактирование локальной формы

При нажатии на кнопку отобразится неприятное предупреждение об ошибке JavaScript. Все правильно, мы не прописали не одно действие по редактированию информации.

Свяжитесь с нами по адресу приложение/контроллеры/contacts_controller.rb Просто добавьте туда две строки Это было так класс КонтактыКонтроллер < ApplicationController # GET /контакты # ПОЛУЧИТЬ /contacts.xml индекс защиты @contacts = Contact.find(:all) ответить_чтобы сделать |формат| format.html # index.html.erb format.xml {рендеринг: xml => @contacts } конец конец Это станет так класс КонтактыКонтроллер < ApplicationController Protect_from_forgery :only => [:создать, :удалить, :обновить] Contact.content_columns.each do |column| in_place_edit_for :контакт, columns.name конец # GET /контакты # ПОЛУЧИТЬ /contacts.xml индекс защиты @contacts = Contact.find(:all) ответить_чтобы сделать |формат| format.html # index.html.erb format.xml {рендеринг: xml => @contacts } конец конец Первая линия Protect_from_forgery :only => [:создать, :удалить, :обновить] Включает защиту запросов от подделки.

Без этой опции они работать не будут( подробнее ) :) Contact.content_columns.each do |column| in_place_edit_for :contact, columns.name конец Теперь все свойства локального инструмента редактирования сохранят внесенные изменения.

Если, например, вам нужно было работать только с полем электронная почта , достаточно было бы добавить in_place_edit_for :контакт, :электронная почта вместо предыдущего фрагмента кода.

Вот и все.

Удачи в освоении РОР! Кросспост от моего блог Теги: #rails #ruby #Ajax #web 2.0 #web 2.0 #web 2.0 #ruby

Вместе с данным постом часто просматривают: