저는 사용자를 인수로 전달하는 데 약 30 개의 메일러 메소드가 있습니다. 뷰에서 @user 변수에 액세스해야하므로 모든 메일러 메서드에서이 인스턴스 변수를 설정해야합니다 (예 : send_x_email (user)).ActionMailer의 인스턴스 변수 설정
일반적으로 이것은 initialize 메소드에서 수행되지만 메일러가 약간 다르게 작동한다는 것을 읽었습니다. 또한 메소드 중 일부는 다른 수의 인수를 사용합니다 (하나는 사용자 만 사용하고 다른 하나는 사용자와 메시지를 사용).
내가 콜백 before_action 조사하고이 게시물
Setting instance variables in Action Mailer?
보았다 ...하지만 난 아직도 붙어했습니다.
메일러 클래스의 30 가지 방법 중 @user = user를 제거하고 사물을 단순화하는 방법에 대한 의견을 보내 주시면 감사하겠습니다. 건배!
class ReminderSender < ActionMailer::Base
def send_commands_email(user)
@user = user
mail(to: @user.email,
subject: "All Commands",
from: "<[email protected]#{ENV['DOMAIN']}>")
end
def send_attachment_warning(user, message)
@user = user
@message = message
mail(to: @user.email,
subject: "Attachment Warning",
from: "<[email protected]#{ENV['DOMAIN']}>")
end
end
동의 : 모든 방법에서'@ 사용자 '를 설정하십시오. 실제로 메일러 방법을 컨트롤러 동작과 유사하게 생각할 수 있습니다. 컨트롤러 액션에서는 각 메소드에 대해 인스턴스 변수를 설정하는 것에 대해 두 번 생각하지 않습니다. 요청마다 새로운 컨트롤러 인스턴스가 생성되고 정확히 하나의 액션이 호출된다는 것을 알기 때문입니다. – jjm