我使用的设计和宝石具有2个控制器:滑轨:调用从另一个控制器的控制器方法 - > NoMethodError
1:控制器/管理/ 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' ..虽然它看起来像你试图做的不是真的正确。你想重定向吗? – varatis
或者修改你的create函数:'def create' - >'def self.create',它会使你的函数成为静态的,并且可以通过类名调用 –
控制器方法不是简单的方法,而是'actions',意思是响应http请求。不要将控制器视为像通常的ruby模块/类持有一些代码。将您想要从多个控制器调用的代码保存在单独的模块中,并将该模块包含在所有这些控制器中。并调用模块方法 –