2012-10-16 93 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

相關問題