2011-06-16 9 views
16

यहाँ ActionMailerActionMailer उदाहरण विधि वर्ग विधि की तरह इस्तेमाल किया जा रहा

class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def welcome_email(user) 
    @user = user 
    @url = "http://example.com/login" 
    mail(:to => user.email, 
     :subject => "Welcome to My Awesome Site") 
    end 

end 

और नियंत्रक में

class UsersController < ApplicationController 
    # POST /users 
    # POST /users.xml 
    def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
     if @user.save 
     # Tell the UserMailer to send a welcome Email after save 
     UserMailer.welcome_email(@user).deliver 

     format.html { redirect_to(@user, :notice => 'User was successfully created.') } 
     format.xml { render :xml => @user, :status => :created, :location => @user } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 
end 

तो क्यों रेल उदाहरण के तरीकों के साथ rubyist भ्रमित करने के लिए कोशिश कर रहा है पर गाइड से एक संक्षिप्त टुकड़ा है कक्षा के तरीके के रूप में? मुझे लगता है कि उन्होंने गायब विधि को ओवरराइड कर दिया है, लेकिन यह सिर्फ भ्रमित करने में काम करता है! या मुझसे यहां कुछ छूट रहा है?

यानी क्यों स्वयं .welcome_email (उपयोगकर्ता)

उत्तर

5

डीईएफ़ के रूप में परिभाषित नहीं welcome_email यह था #self.welcome_email आप वर्ग अपने आप को, जो सभी डिफ़ॉल्ट पैरामीटर आदि के लिए कुछ विन्यास की आवश्यकता का एक उदाहरण बनाने के लिए चाहते हैं, तो रेल सिर्फ एक ही नाम के कारखाने के तरीके उपलब्ध करा रहे हैं।

मेलर = TheMailer.new:

स्रोत कोड का शीघ्रता से अवलोकन से, आप कर रहे हैं ठीक है, यह method_missing, उपयोग करने के लिए जहां मेलर वास्तव में साथ बनाई गई है प्रतीत होता है (: welcome_email, * args)

रेल इस तरह की बहुत सारी "वूडू" चीजें करते हैं, आम तौर पर केवल आपके द्वारा लिखे गए कोड की मात्रा को बचाने के लिए। क्लास विधि होने के लिए बस #welcome_email बदलना आपको एक उदाहरण नहीं देगा।

+3

अच्छी तरह से रेल मेलर का आह्वान करते समय विधि बनाने के लिए 'निर्माण' या 'डिलीवरी' रखने के साथ जारी रहना चाहिए। पागल वूडू के पक्ष में उन (रेल 3) को अपमानित करना सिर्फ पागल वूडू डेवलपर्स बनाने जा रहा है जो सोचते हैं कि वे रूबी जानते हैं लेकिन वे वास्तव में –

+0

नहीं थे क्या आपके पास कोई प्रश्न है, या सिर्फ अपनी राय सुनना चाहते हैं? ;) ऐसा लगता है जैसे आपने एक विषयसंगत प्रश्न के साथ एक विषय बनाया है, जिसे आप वास्तव में नहीं करना चाहते हैं और संभवतः बंद हो जाएगा। – d11wtq

+0

यह एक प्रश्न था - लेकिन उत्तर के आधार पर कि कुछ वास्तविक तार्किक कारणों के बजाय इसका 'वूडू' - मुझे लगता है कि यह अप्रासंगिक दिखता है। –

संबंधित मुद्दे