2012-10-16 92 views
3

我使用的设计和宝石具有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 
+1

尝试'RegistrationsController.new.create' ..虽然它看起来像你试图做的不是真的正确。你想重定向吗? – varatis

+1

或者修改你的create函数:'def create' - >'def self.create',它会使你的函数成为静态的,并且可以通过类名调用 –

+2

控制器方法不是简单的方法,而是'actions',意思是响应http请求。不要将控制器视为像通常的ruby模块/类持有一些代码。将您想要从多个控制器调用的代码保存在单独的模块中,并将该模块包含在所有这些控制器中。并调用模块方法 –

回答

1

变化RegistrationsController.createRegistrationsController.new.create

OR

变化def createdef self.create

您在这里遇到的困惑是在您要调用实例方法的地方使用类方法。您可以通过调用实例上的方法或将方法更改为类方法来解决此问题。

+1

请记住,当您这样做时,请求不在RegistrationsController中。 – JakeTheSnake

相关问题