由于 Devise 或 Clearance 等身份验证 gem 使用它们自己的内置控制器,因此在覆盖它们时我有几个问题。每次我尝试覆盖它时,似乎都出现了问题,我不知道究竟是什么导致了错误。
例如,要使用 Devise 创建一个新的用户控制器,我知道我必须创建一个这样的控制器:
# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
都好。现在假设我想def new
在控制器的各个部分添加某些东西。
1.)要单独留下def create
控制器的一部分,我必须放入
def create
super
end
是对的吗?还是我什至需要在新控制器中引用它?
2.)如果我输入
def new
#my custom code here
end
这会取代def new
原始设计控制器的部分,还是只是添加到它?意思是说,我是否也必须投入
resource = build_resource({})
respond_with_navigational(resource){ render_with_scope :new }
Devise registrations_controller.rb的 def new 部分的默认行为是什么?
3.) 如果您已登录,Devise 中有一个过滤器会阻止您注册,但我需要覆盖它。我该怎么做呢?我猜它与registrations_controller.rbprepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]
的部分有关,但我不太确定。
同样的问题也适用于 Clearance,尽管路径和文件略有不同。(我也要求 Clearance,因为我还没有决定使用哪个身份验证 gem——因为轻量级代码,Clearance 对我很有吸引力,但是 Devise具有我也需要的其他功能)。