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

时间:2013-06-08 14:30:26

标签: ruby-on-rails devise

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

所以我的问题是new/sessions正在运行,但是当我尝试注册时,表单发布似乎存在问题。请在此处查看login form

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

1 个答案:

答案 0 :(得分:14)

实际上,您的问题与this question相同,但我会稍微解释一下,我会尝试这样做。

  1. 自定义注册设计。 (customize devise
  2. 在注册表单旁边创建一个自定义登录表单。 (wiki

  3. 一步一步:

    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
      
    2. 为自定义会话创建控制器并从默认会话设备继承

      # customize session controller
      class SessionsController < Devise::SessionsController
        def create
          super
        end
      end
      
    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 %>
      
    4. 覆盖应用程序助手中的设计映射方法

      module ApplicationHelper
        def resource_name
          :user
        end
      
        def resource
          @resource ||= User.new
        end
      
        def devise_mapping
          @devise_mapping ||= Devise.mappings[:user]
        end
      end
      
    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
      
    6. 希望这有帮助!