4

나는 다음과 같은 작업을 미리 클래스가 있습니다어떻게 메일러 미리보기 URL 매개 변수에 액세스 할

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

서버 보인다

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

내가 이렇게 같은 방법으로 PARAMATERS를 전달하기 위해 노력하고있어

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

을하지만 해시 params로 접근하려고 할 때, 나는 에로을 얻을 : 그들을받을 아르 자형.

미리보기 메서드에서 이러한 매개 변수에 액세스 할 수 있습니까?

+0

어떻게 매개 변수에 액세스합니까? – usha

+0

현재로서는'invites' 메쏘드에서'Rails.logger.info (params)'로 시도하고 있습니다. – Numbers

+0

오류는 무엇입니까? – usha

답변

3

나는 메일러 미리보기 시스템의 코드를 파고 불행히도 요청 매개 변수가 미리보기 클래스에 전달되지 않으므로 미리보기에 액세스 할 수 없다는 것을 알았습니다.

해당 컨트롤러 작업은 레이디입니다 (Rails::MailersControlller#preview). 여기에서 ActionMailer::Preview#call을 호출하고 "이메일"의 이름을 전달하는 것을 볼 수 있습니다 (예 : 미리보기에서 적절한 방법).

+2

내 PR https : //github.com/rails/rails/pull/20646 제출이 가능합니다, pls'+ 1' 역시 중요합니다. – equivalent8

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 
관련 문제