如何使用in_place_editing而不是fields_for?

时间:2009-03-15 07:46:13

标签: ruby-on-rails in-place-edit

我使用restful_authentication设置用户模型,然后拥有属于它的个人资料模型。我一直在使用fields_for将用户和该用户个人资料的字段组合到用户编辑视图中。

我希望能够在User show视图中设置一些字段以使用in_place_editing插件。它可以在给定示例

之后的用户表字段中正常工作

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

如何为users_controller和/views/users/show.html.erb创建:user.profile, :status之类的符号?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我使用in_place_editor帮助器标记。在span / div中包装要编辑的内容,在in_place_editor标记中为其指定唯一ID和引用。

# 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验证。

修改
This Question 会处理如何包含真实性令牌。