2016-02-08 15 views
0

問題:爲什麼該方法是不確定的,如果它只是在那裏?ActionMailer - NoMethodError:未定義的方法X for MyMailer:類

詳情:

我有一個非常簡單的郵件類:

class ProductMailer < ApplicationMailer 
    def sample_email 
    mail(to: "[email protected]") # I hardcode my own email just to test 
    end 
end 

和一個非常簡單的調用從的ProductsController:

def sample_email 
    ProductMailer.sample_email().deliver_later 
    redirect_to @product, notice: 'Email was queued.' 
end 

電子郵件發送失敗。我使用Sidekiq在後臺處理電子郵件。該Sidekiq的Web UI顯示失敗作業的嘗試次數頁面,我可以看到失敗的原因:

NoMethodError: undefined method `sample_email' for ProductMailer:Class 

我試圖重命名的方法,並與rails server重新啓動服務器,但這些方法都去除錯誤。我沒有使用任何命名空間。

問題:爲什麼該方法不確定,如果它只是在那裏?

注:我發現一個偶然的機會,該方法發現,如果我將其命名爲notify,但也許是因爲我從覆蓋的ActionMailer基類的一些方法,我不知道。

+1

不ApplicationMailer從繼承的ActionMailer :: Base的? –

+0

是的,ApplicationMailer繼承自ActionMailler :: Base。我用'rails generate mailer'生成郵件。 –

回答

-1

這是因爲你已經定義了一個實例方法,然後你嘗試在一個類上調用它。將其更改爲

def self.sample_email 
    .... 
+1

這是錯的,不是嗎? – Pavan

+0

這確實是錯誤的。梅勒類不應該用'self'聲明方法 – seza443

2

答:重啓Sidekiq

我創建的郵件類開始Sidekiq之前,但我改名爲sample_email方法而Sidekiq已經在運行,所以它似乎Sidekiq不承認新的方法在飛行中。

我改名的方法,因爲我用的開發環境,在那裏你可以在運行中改變幾乎任何東西......

相關問題