Как использовать in_place_editing вместо fields_for?
Я устанавливаю модель пользователя с restful_authentication
а затем иметь модель профиля, которая принадлежит ему. Я использую fields_for
объединить поля для редактирования пользователя и профиля этого пользователя в представлении редактирования пользователя.
Я хотел бы иметь возможность установить несколько полей для использования in_place_editing
плагин в представлении User show. Он отлично работает на полях таблицы пользователя, следуя приведенному примеру
users_controller.rb
in_place_edit_for :user, :email
/views/users/show.html.erb
<%= in_place_editor_field :user, :email %>
но я не могу понять, как правильно написать контроллер или in_place_editor_field
немного в представлении для любого поля, к которому я обращаюсь в представлении редактирования через:
<% fields_for @up do |profile_fields| %>
<%= profile_fields.text_field :status %>
<% end %>
в users_controller (для ясности):
def edit
@user = User.find(params[:id])
@up = @user.profile
end
Как мне создать символы для чего-то вроде :user.profile, :status
для users_controller и /views/users/show.html.erb?
Спасибо за помощь.
1 ответ
Я использую вспомогательный тег in_place_editor. Оберните материал, который вы хотите редактировать, в span/div, присвойте ему уникальный идентификатор и ссылку на него в теге in_place_editor.
# in the view
<span id="user_email"><%= user.email -%></span>
<%= in_place_editor "user_email", :url => {:controller => :users, :action => 'set_user_email', :id => user} %>
# in the controller
User.content_columns.each do |column|
in_place_edit_for :user, column.name
end
Волшебство заключается в следующем:set_user_email - это автоматически генерируемый метод в вашем контроллере, который создается, когда вы используете in_place_edit_for в контроллере модели и его атрибутов.
Я включил способ, позволяющий редактировать все поля модели, но вы можете ограничить его несколькими атрибутами модели.
В зависимости от того, как вы настроили контроллер, вам может потребоваться установить protect_from_forgery, чтобы исключить действие набора. Просто имейте это в виду - это удалит валидации csrf для методов post из полей редактирования на месте.
РЕДАКТИРОВАТЬ
Этот вопрос описывает, как включить токен подлинности.