4

我有以下工作預覽類:我將如何訪問梅勒預覽URL參數

class UserMailerPreview < ActionMailer::Preview 
    def invite 
    USerMailer.invite 
    end 
end 

我試圖PARAMATERS傳遞給方法,像這樣:

localhost:3000/rails/mailers/user_mailer/invite?key1=some_value 

的服務器似乎接收他們:

Parameters: {"key1"=>"some_value", "path"=>"user_mailer/invite"} 

但試圖與哈希params訪問他們的時候,我得到一個埃羅河

我可以在預覽方法中訪問這些參數,如果是這樣 - 如何?

+0

你是如何訪問params的? – usha 2014-08-28 14:23:01

+0

目前,我只是在'invite'方法中嘗試'Rails.logger.info(params)'。 – Numbers 2014-08-28 14:26:04

+0

你得到的錯誤是什麼? – usha 2014-08-28 15:27:30

回答

3

我挖掘了郵件預覽系統後面的代碼,發現不幸的是,沒有任何請求參數被傳遞給預覽類,因此無法進行預覽。

相關的控制器操作在railties中:Rails::MailersControlller#preview。在這裏,你可以看到它叫ActionMailer::Preview#call,只是傳遞「電子郵件」的名稱(即:在預覽中適當的方法)。

+2

如果我的公關https: //github.com/rails/rails/pull/20646獲得提交這將是可能的,如果它對你也很重要,請''+1'。 – equivalent8 2015-06-29 08:33:08

1

今天我破解了這個方法,提出了這個解決方案和blog post on extending ActionMailer

# config/initializers/mailer_injection.rb 

# This allows `request` to be accessed from ActionMailer Previews 
# And @request to be accessed from rendered view templates 
# Easy to inject any other variables like current_user here as well 

module MailerInjection 
    def inject(hash) 
    hash.keys.each do |key| 
     define_method key.to_sym do 
     eval " @#{key} = hash[key] " 
     end 
    end 
    end 
end 

class ActionMailer::Preview 
    extend MailerInjection 
end 

class ActionMailer::Base 
    extend MailerInjection 
end 

class ActionController::Base 
    before_filter :inject_request 

    def inject_request 
    ActionMailer::Preview.inject({ request: request }) 
    ActionMailer::Base.inject({ request: request }) 
    end 
end