我使用的設計和寶石具有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模塊/類持有一些代碼。將您想要從多個控制器調用的代碼保存在單獨的模塊中,並將該模塊包含在所有這些控制器中。並調用模塊方法 –