Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将设计编辑页面表单拆分为两个页面?_Ruby On Rails_Forms_Devise - Fatal编程技术网

Ruby on rails 如何将设计编辑页面表单拆分为两个页面?

Ruby on rails 如何将设计编辑页面表单拆分为两个页面?,ruby-on-rails,forms,devise,Ruby On Rails,Forms,Devise,我正试图找出如何将表单从设计编辑页面拆分为两个页面,因为它现在有太多的字段。因此,用户的目标是能够从单独的页面更新他们的个人资料信息。我对Rails还比较陌生,所以我不明白发生了什么。。。我没有为此目的创建新的控制器,我正在使用现有的Desive控制器。。。我得到的错误是,注册控制器中没有定义编辑配置文件操作,即使有 我所做的: 使用表单创建了一个新的视图style.html.erb,它位于注册视图下。我刚刚从现有的edit.html.erb复制到表单 <%= form_for resou

我正试图找出如何将表单从设计编辑页面拆分为两个页面,因为它现在有太多的字段。因此,用户的目标是能够从单独的页面更新他们的个人资料信息。我对Rails还比较陌生,所以我不明白发生了什么。。。我没有为此目的创建新的控制器,我正在使用现有的Desive控制器。。。我得到的错误是,注册控制器中没有定义编辑配置文件操作,即使有

我所做的:

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

<%= 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