0

最近、Ruby on Rails で非常に奇妙なコードを見ましたhttp://railscasts.com/episodes/206-action-mailer-in-rails-3

   class UserMailer < ActionMailer::Base
      default :from => "ryan@railscasts.com"

      def registration_confirmation(user)
        @user = user
        attachments["rails.png"] = File.read("#{Rails.root}/public/images/rails.png")
        mail(:to => "#{user.name} <#{user.email}>", :subject => "Registered")
      end
    end

    #controller
    UserMailer.registration_confirmation(@user).deliver

それはどのように可能ですか?registration_confirmationクラス メソッド (または C# の静的メソッドのようなもの) ではなく、インスタンスメソッドです。

4

1 に答える 1

2

少しトリッキーです。

AbstractController から派生するため、定義されたメソッドはパブリック インスタンス メソッドとして追加されます。(http://api.rubyonrails.org/classes/ActionMailer/Base.html)

メーラー クラスをインスタンス化することはありません。むしろ、クラス自体で定義したメソッドを呼び出すだけです。

AbstractController::Baseを調べると、どこでクラスが抽象化され、アクション メソッドがパブリック インスタンス メソッドに変換されているかがわかります。

于 2012-08-17T21:00:38.523 に答える