1

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

我希望能够设置一些字段以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

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

感谢所有帮助。

4

1 回答 1

1

我使用 in_place_editor 辅助标签。将您要编辑的内容包装在一个 span/div 中,给它一个唯一的 id 并在 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 以排除设置操作。请注意 - 这将从就地编辑字段中删除 post 方法的 csrf 验证。

编辑
此问题处理如何包含真实性令牌。

于 2009-03-16T05:17:20.763 回答