【发布时间】:2012-10-16 15:36:02
【问题描述】:
我正在使用 Devise gem 并拥有 2 个控制器:
1:控制器/admin/mailings_controller.rb:
class Admin::MailingsController < ApplicationController
def self.send_emails
...
RegistrationsController.create
...
end
end
2:控制器/registrations_controller.rb:
class RegistrationsController < Devise::RegistrationsController
...
# POST
def create
# do some stuff
super
# do some stuff
end
...
end
但是当我执行(在控制台中)...
Admin::MailingsController.send_emails
...我明白了...
"NoMethodError: undefined method `create' for RegistrationsController:Class"
为什么?以及如何解决这个问题?
rake routes
...显示没有问题:
user_registration POST -> /users(.:format) -> registrations#create
【问题讨论】:
-
试试
RegistrationsController.new.create.. 虽然看起来你正在尝试做的事情并不正确。您要重定向吗? -
或者修改你的创建函数:
def create->def self.create,它会让你的函数静态并且可以通过类名调用 -
控制器方法不是简单的方法而是
actions,意思是响应http请求。不要将控制器视为包含一些代码的通常 ruby 模块/类。将要从多个控制器调用的代码保存在单独的模块中,并将该模块包含在所有这些控制器中。并调用模块方法 -
不,我不是在尝试重定向,只是为了重用 Devise gem 中现有代码的一部分。并且“send_mails”方法只能使用1次(在启动时),所以我想这样做是可以的。谢谢大家的帮助 - 第一个作为回复发布的人会被接受......
标签: ruby-on-rails devise controller nomethoderror