2015-06-25 81 views
1

這是Michael Hartle書中的工作代碼。這是在app/mailers/user_mailer.rb郵寄者代碼來創建激活郵件用戶帳戶:定義爲實例方法的類方法

class UserMailer < ActionMailer::Base 
    def account_activation(user) 
    @user = user 
    mail to: user.email, subject: "Account activation" 
    end 
end 

使用紅寶石文件中生成的郵件在預覽中test/mailers/previews/user_mailer_preview.rb

class UserMailerPreview < ActionMailer::Preview 
    def account_activation 
    user = User.first 
    user.activation_token = User.new_token 
    UserMailer.account_activation(user) 
    end 
end 

account_activation方法被定義作爲user_mailer.rb中的實例方法。但它在預覽生成器中用作類方法。我誤解了代碼還是有其他事情在這裏發生?

給任何有同樣疑問的人

這就是ActionMailer的工作原理。電子郵件在擴展ActionMailer::Base的類中定義爲實例方法,但可以按類方法訪問它們。

+0

無法複製。 – sawa

回答

3

這就是ActionMailer的工作原理。電子郵件在擴展ActionMailer::Base的類中定義爲實例方法,但可以按類方法訪問它們。

class MyMailer < ActionMailer::Base 
    def my_email 
    end 
end 

MyMailer.my_email 
# and not MyMailer.new.my_email 

這是一個快捷方式,將實例化的ActionMailer類的一個實例,可以調用相應的電子郵件的方法和返回的電子郵件。這是the code that handles the call

+0

@Simeon謝謝..這就解釋了.. – raj