3

我想为注册和登录页面呈现不同的布局。

有一个类似的线程可以处理这个问题,但并不完全相同。

我需要能够仅为注册和登录页面呈现不同的布局,而不是控制器中的所有其他操作。

在下面users/registrations_controller.rb

class Users::RegistrationsController < Devise::SessionsController
  def new
    render :layout => "auth"
  end
end

我的路线

MasterCard::Application.routes.draw do
  devise_for :users, :controllers => { :registrations => "users/registrations" }, :path => "users", :path_names => { :sign_in => 'login', :sign_out => 'logout' }

  devise_scope :user do
    get "login", :to => "users/sessions#new"
    # post "logout", :to => "users/sessions"
  end

  root :to => 'pages#home'
  match '/about' => 'pages#about'
end

这是我去注册页面时遇到的错误。

undefined methodnil 的错误:NilClass`

4

1 回答 1

3

首先,您的意思是子类化Devise::RegistrationsController而不是子类化Devise::SessionsController

覆盖设计控制器操作似乎有点毛茸茸。您可以通过覆盖RegistrationsController使用的默认布局来避免这种情况:

class Users::RegistrationsController < Devise::RegistrationsController
  layout "auth"
end

至于为什么您会收到该特定错误:

您正在重新定义new我假设应该Devise::RegistationsController具有以下定义的操作:

def new
  resource = build_resource({})
  respond_with resource
end

它设置 aresource然后在设计辅助方法中引用devise_error_messages!

def devise_error_messages!
  return "" if resource.errors.empty?
  ...
end

在默认设计“sign_up”模板中使用,users/registrations/new.html.erb

...
<%= form_for(resource, :as => resource_name, ...) do |f| %>
  <%= devise_error_messages! %>
...

您看到该错误是因为您没有定义resource.

于 2012-11-18T07:24:56.310 回答