Ruby on rails 如何将设计编辑页面表单拆分为两个页面?
我正试图找出如何将表单从设计编辑页面拆分为两个页面,因为它现在有太多的字段。因此,用户的目标是能够从单独的页面更新他们的个人资料信息。我对Rails还比较陌生,所以我不明白发生了什么。。。我没有为此目的创建新的控制器,我正在使用现有的Desive控制器。。。我得到的错误是,注册控制器中没有定义编辑配置文件操作,即使有 我所做的: 使用表单创建了一个新的视图style.html.erb,它位于注册视图下。我刚刚从现有的edit.html.erb复制到表单Ruby on rails 如何将设计编辑页面表单拆分为两个页面?,ruby-on-rails,forms,devise,Ruby On Rails,Forms,Devise,我正试图找出如何将表单从设计编辑页面拆分为两个页面,因为它现在有太多的字段。因此,用户的目标是能够从单独的页面更新他们的个人资料信息。我对Rails还比较陌生,所以我不明白发生了什么。。。我没有为此目的创建新的控制器,我正在使用现有的Desive控制器。。。我得到的错误是,注册控制器中没有定义编辑配置文件操作,即使有 我所做的: 使用表单创建了一个新的视图style.html.erb,它位于注册视图下。我刚刚从现有的edit.html.erb复制到表单 <%= form_for resou
<%= form_for resource, as: resource_name, url: registration_path(resource_name), layout: :horizontal do |f| %>
这是我目前的注册管理员:
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
类注册控制器
如果有人需要,我已经找到了解决方案:
创建从DevisionController继承的新控制器
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
因此,现在当我访问/users/style时,我可以编辑和更新表单的第二部分。它不应该受到保护。将其移到受保护的关键字我这样做了,现在我在尝试访问/users/style时遇到了一个新错误:找不到路径/users/style的设计映射。发生这种情况可能有两个原因:1)您忘记将路由包装在范围块内。例如:designe\u scope:user do get“/some/route”=>“some\u designe\u controller”end 2)您正在测试绕过路由器的designe控制器。如果是这样的话,您可以明确地告诉designe要使用哪个映射:@request.env[“designe.mapping”]=design.mappings[:user]我添加了designe_scope:user do get“/users/style”=>“registrations#edit_profile”结束,但又出现了一个新错误“模板丢失了”您是否考虑过使用Javascript/CSS来拆分表单的表示?有许多这样的预构建解决方案,使其变得非常简单。看起来不那么复杂,会给用户带来更好的体验。嗨@max是的,我考虑过,但我也在考虑UI,所以我需要表单放在单独的页面上…只是一个小贴士。。。约定是
RegistrationController
,而不是RegistrationController
。然后在路由中,它将是“注册#样式”
,而不是“注册#样式”
。另外,较短的语法是:get'users/style',to'registrations#style',as'style'
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
devise_scope :user do
match 'users/style' => 'registration#style', :via => [:get], :as => 'style'
end