Как использовать in_place_editing вместо fields_for? - PullRequest
1 голос
/ 15 марта 2009

Я устанавливаю модель пользователя с помощью restful_authentication, а затем имею модель профиля, которая ему принадлежит. Я использовал fields_for для объединения полей для редактирования пользователя и профиля этого пользователя в представлении редактирования пользователя.

Я хотел бы иметь возможность установить несколько полей для использования плагина in_place_editing в представлении User show. Он отлично работает в полях таблицы пользователя, следуя примеру

users_controller.rb

in_place_edit_for :user, :email

/ просмотров / пользователей / 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 Ответ

1 голос
/ 16 марта 2009

Я использую вспомогательный тег 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, чтобы исключить действие set. Точно так же, как вы знаете - это удалит валидации csrf для методов записи из полей редактирования на месте.

EDIT
В этом вопросе описывается, как включить маркер подлинности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...