Rails 3,设计:使用不同的布局进行注册,登录页面

时间:2012-11-18 05:02:52

标签: ruby-on-rails ruby-on-rails-3 layout devise

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

There's s similar thread that deals with this problem, but it's not exactly the same.

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

<{1>}

下的

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 错误'为nil:NilClass`

1 个答案:

答案 0 :(得分: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

设置resource,然后在设计辅助方法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