我正在尝试如何将表单从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
答案 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时,我可以编辑和更新表单的第二部分。