Rails设计自定义注册和登录同一页面问题

Obe*_*son 7 ruby-on-rails devise

在我的Ruby应用程序中,我使用'devise'gem进行身份验证,但我想自定义视图,在自定义每个视图后生成设计视图并将它们作为部分保存在devise文件夹中,因为我想将它们渲染到另一种观点.

所以我的问题是,new/sessions工作正常,但是当我尝试注册时,表单发布似乎存在问题.请在此处查看登录表单

我在设计文档中阅读了很多关于如何自定义布局的内容,但是我对如何实现使表单渲染在devise views文件夹之外工作感到困惑.

rai*_*_id 14

实际上,你的问题与这个问题是一样的,但我会解释一下,我试着去做.

  1. 自定义注册设计.(自定义设计)
  2. 在注册表单旁边创建一个自定义登录表单.(维基)

一步步 :

  1. 创建控制器以自定义注册并从默认注册设备继承

    # customize registration controller
    class RegistrationsController < Devise::RegistrationsController
      layout 'login'
      skip_before_filter :require_no_authentication
      before_filter :resource_name
    
      def resource_name
        :user
      end
    
      def new  
        @user = User.new
      end
    
      def create
        @user = User.new(params[:user])
        # another stuff here
      end
    end
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建用于自定义会话的控制器并从默认会话设备继承

    # customize session controller
    class SessionsController < Devise::SessionsController
      def create
        super
      end
    end
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建注册视图 app/registrations/new.html.erb

    将登录和注册表格放入 app/registrations/new.html.erb.(注册表旁边看起来像你的项目)

    <%= form_for(resource, :as => resource_name, :url => user_session_path(resource_name)) do |f| %>
    <%# another stuff here %>  
    <% end %>
    
    <%= form_for(resource, :as => resource_name, :url => user_registration_path(resource_name)) do |f| %>
    <%# another stuff here %>
    <% end %>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 覆盖应用程序助手中的设计映射方法

    module ApplicationHelper
      def resource_name
        :user
      end
    
      def resource
        @resource ||= User.new
      end
    
      def devise_mapping
        @devise_mapping ||= Devise.mappings[:user]
      end
    end
    
    Run Code Online (Sandbox Code Playgroud)
  5. 自定义注册设计和会话的路由

    devise_scope :user do
      # using login path for registration
      get '/login' => 'registrations#new', :as => :new_user_registration
      post '/signup' => 'registrations#create', :as => :user_registration
      post '/signin' => 'sessions#create', :as => :user_session
    end
    
    Run Code Online (Sandbox Code Playgroud)

希望这有帮助!