如何将Devise编辑页面表单拆分为两个页面?

时间:2016-05-26 10:38:14

标签: ruby-on-rails forms devise

我正在尝试如何将表单从Devise编辑页面拆分为两个页面,因为它现在有太多字段。因此,目标是让用户能够从单独的页面更新他们的个人资料信息。我对Rails相当新,所以我不明白发生了什么......我没有为此创建新的控制器,我正在使用现有的Devise控制器...我得到的错误是没有即使有..

,注册控制器中定义的edit_profile操作

我做了什么:

使用表单创建了一个新视图style.html.erb,它位于注册视图下。我刚从现有的edit.html.erb

复制到表单
<%= form_for resource, as: resource_name, url: registration_path(resource_name), layout: :horizontal do |f| %>

将此添加到路线:

devise_for :users, class_name: 'FormUser', :controllers => { omniauth_callbacks: 'omniauth_callbacks', registrations: 'registrations' }
  **get "users/style" => "registrations#edit_profile", as: "edit_profile"**

到目前为止,这是我的注册控制器:

class RegistrationsController < Devise::RegistrationsController
  prepend_before_filter :authenticate_scope!, only: [:edit, :profile, :update, :destroy]

  protected 


  def update_resource(resource, params)
    if resource.encrypted_password.blank? # || params[:password].blank?
      resource.email = params[:email] if params[:email]
      if !params[:password].blank? && params[:password] == params[:password_confirmation]
        logger.info "Updating password"
        resource.password = params[:password]
        resource.save
      end
      if resource.valid?
        resource.update_without_password(params)
      end
    else
      resource.update_with_password(params)
    end
  end

    def edit_profile

    end


end

1 个答案:

答案 0 :(得分:1)

如果有人需要,我找到了解决方案:

创建一个继承自DeviseController

的新控制器
class RegistrationController < Devise::RegistrationsController
    def style
        @user = current_user
        if @user
            render :style
        else
            render file: 'public/404', status: 404, formats: [:html]
         end 
    end
 end

步骤2,在注册设计视图下创建一个视图:style.html.erb。只需从此处需要的edit.html.erb中复制表单的一部分。

步骤3,将其添加到您的路线:

devise_scope :user do 
     match 'users/style' => 'registration#style', :via => [:get], :as => 'style'
end 

所以现在当我访问/ users / style时,我可以编辑和更新表单的第二部分。