【发布时间】:2014-02-19 18:11:20
【问题描述】:
在 Rails(4.0.2 版)中,我使用 Devise gem(3.0.4 版)生成了一个简单的模型,名为 User。我想自定义控制器。所以我做了一个文件“user_controller”:
class UserController < Devise::SessionsController
def create
super
puts "this works"
end
end
这是我的路线:
SecretApp::Application.routes.draw do
root 'static_pages#home'
match '/about', to: 'static_pages#about', via: 'get'
match '/profile', :to => "profile#show", via:'get'
devise_for :users, :controllers => {:registrations => "registrations", :sessions => "user"}
end
我假设在覆盖 Devise 控制器时,您必须在每个方法中调用 super,除非您完全覆盖该方法,对吗?无论如何,当我创建一个新用户时,控制台永远不会打印“this works”,所以我很确定控制器没有被使用。为什么?
然而,我确实设法为 User 模型覆盖了我的注册控制器,这让我感到困惑,因为我使用相同的方法来覆盖 User 控制器(除了继承的超类和控制器名称)。我确信这一点,因为我在 new 方法中有 puts "this is ok",它确实将其打印到控制台。
【问题讨论】:
-
Devise::SessionsController处理会话(登录/注销等),但您正在谈论创建用户,这将由Devise::Registrations处理。您还说您已成功覆盖注册控制器。你能澄清你在问什么吗? -
我在问如何为 Devise 模型制作自定义控制器类。长话短说,注册后,我有一个用户的嵌套表单和一个
Profile模型(每个用户都有一个Profile)。 Devise 没有将配置文件属性保存到配置文件模型中。所以我需要在创建用户时分配它们,因此需要用户自定义控制器。根据thisDevise::SessionsController是自定义控制器的正确超类。 -
我认为您可能误解了他们的示例,该示例涉及会话管理。如果要处理用户创建,请使用
class UsersController < Devise::RegistrationsController。
标签: ruby-on-rails ruby devise controller overriding