Ruby on rails 从用户编辑设备#显示视图

Ruby on rails 从用户编辑设备#显示视图,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,我有一个Rails 3.2应用程序,它使用Desive进行身份验证。目前,新用户注册工作正常,编辑用户注册路径均按设计工作。但是,我设计了一个选项卡式用户配置文件,用户可以在其中访问各种表单(编辑注册、网站设置等) 问题 尽管users#show页面包含一个用于编辑注册的部分,但实际上不允许用户进行编辑。我只想在用户控制器中重新创建一个编辑操作,但我想保留Deavise的一些内置功能(例如丢失密码等。不确定是否会影响) 有什么方法可以让用户在“显示用户”视图上编辑注册?编辑操作?您可以覆盖设备的

我有一个Rails 3.2应用程序,它使用Desive进行身份验证。目前,
新用户注册
工作正常,
编辑用户注册
路径均按设计工作。但是,我设计了一个选项卡式用户配置文件,用户可以在其中访问各种表单(编辑注册、网站设置等)

问题

尽管
users#show
页面包含一个用于编辑注册的部分,但实际上不允许用户进行编辑。我只想在用户控制器中重新创建一个
编辑
操作,但我想保留Deavise的一些内置功能(例如丢失密码等。不确定是否会影响)


有什么方法可以让用户在“显示用户”视图上编辑注册?编辑操作?

您可以覆盖设备的默认行为以使其正常工作。首先将您的
show
操作带到设备
RegistrationsController
,然后声明操作的路径:

# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
    def show
    end     
end

# config/routes.rb
devise_for :users, :controllers => { :registrations => "registrations" }  
devise_scope :user do
  get "users/show"=> "users/registrations#show", :as => "show_registration"
end
最后,在
show.html.erb
视图中添加一个表单,该表单将提交给
RegistrationController#update
操作。您可以直接从以下位置复制:

resource\u name,:url=>registration\u path(resource\u name),:html=>{:method=>:put})do | f |%>

正确%> 目前正在等待确认: (如果不想更改,请留空)
“关闭”%>
(我们需要您当前的密码来确认您的更改)
结束

瞧!您的自定义
show
操作将包含一个表单,该表单将当前注册资源提交给默认的设备
RegistrationsController#update
操作。

谢谢,请立即尝试。当然,请告知它是否有效。。。实际上我自己还没有实现它。
# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
    def show
        self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
    end
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :autofocus => true %></div>

  <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
  <% end %>

  <div><%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
  <%= f.password_field :password, :autocomplete => "off" %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
  <%= f.password_field :current_password %></div>

  <div><%= f.submit "Update" %></div>
<% end %>
end