【发布时间】:2012-01-20 17:11:40
【问题描述】:
我正在尝试覆盖 Devise 控制器以进行一些小的更改,例如,在为未注册的电子邮件地址请求确认电子邮件时添加一条消息。
我试图用这种方式覆盖Devise::ConfirmationsController1:
# app/controllers/confirmations_controller.rb
class ConfirmationsController < Devise::ConfirmationsController
include Devise::Controllers::InternalHelpers # tried to add this, no success
def create
self.resource = resource_class.send_confirmation_instructions(params[resource_name])
if successfully_sent?(resource)
respond_with({}, :location => after_resending_confirmation_instructions_path_for(resource_name))
else
respond_with(resource)
end
end
end
我认为我正确添加了路线:
devise_for :users, :controllers => { :confirmations => "confirmations" }
我的控制器方法被调用,但是它引发了这个异常:
NoMethodError in ConfirmationsController#create
undefined method `successfully_sent?' for #<ConfirmationsController:0x007fa49e229030>
在我重写的控制器中,我只是复制了Devise:: ConfirmationsController#create 的代码,它本身调用了successfully_sent?(resource)
successfully_sent?方法定义在InternalHelpers2中,这就是我尝试添加include Devise::Controllers::InternalHelpers的原因
这不是我第一次尝试覆盖 Devise 控制器,也不是我第一次失败。我总是设法找到解决方法,但我想了解我缺少什么......提前感谢您的帮助!
[编辑] 设计版本为 1.4.9 Rails 是 3.0.10
【问题讨论】:
-
您使用的是什么版本的设计?您实际上是使用已安装的 Devise 版本的“bundle open devise”(或等效的)复制代码,还是只是从互联网上的某个地方复制代码?我没有看到成功发送?在我的 Devise 版本中定义。
-
已经使用 rake routes 检查了路由
-
@Kyle:确实是我新手的错误!我正在查看 Github 上的最后一个提交版本,这不是我正在使用的版本...感谢您的帮助,我会回答这个问题,所以...谢谢!
-
@JudeArasu:不是路由问题,我在
routes.rb文件中正确添加了自定义设计路由,并且我的控制器被正确调用。
标签: ruby-on-rails devise controllers overriding