2011-09-09 27 views
1

我使用ActionMailer發送電子郵件,但我想使用Sinatra的傾斜渲染。我不知道如何訪問Sinatra的實例範圍從西納特拉之外,所以我可以這樣做:從Sinatra的實例範圍運行方法

class Mailer < ActionMailer 
    def test(address) 
    mail(:to=>address, 
     :body => 'turns out you need something here?') do |format| 
     details = erb(:myview) 
     format.text { details } 
     format.html { markdown(details) } 
    end 
    end 
end 

希望你能看到什麼,我試圖做的,但此刻我得到一個「方法未找到'錯誤。任何想法如何將Sinatra的實例作用域包含在格式塊中?

謝謝。

回答

1

這裏有幾個選項。

一號(有點難看)

class Mailer < ActionMailer 
    def test(address, instance) 
    mail(:to=>address, 
     :body => 'turns out you need something here?') do |format| 
     details = instance.erb(:myview) 
     format.text { details } 
     format.html { markdown(details) } 
    end 
    end 
end 

然後在你的應用程序

get '/send_mail' do 
    Mailer.new.test('[email protected]', self) 
end 

二號

定義你的應用程序的助手在您梅勒類塊。這應該讓它訪問erb。我做了一件非常類似於普通老式郵件的寶石。除了我定義的方法而不是整個類。不過,認爲它應該仍然有效。

helpers do 
    class Mailer < ActionMailer 
    def test(address) 
     mail(:to=>address, 
      :body => 'turns out you need something here?') do |format| 
     details = erb(:myview) 
     format.text { details } 
     format.html { markdown(details) } 
     end 
    end 
    end 
end 

三號

看西納特拉和/或傾斜的代碼,請按照ERB的堆棧,直到它不再關心請求實例,並複製它。

+0

很好的答案 - 謝謝! –