将参数传递给 rails 动作邮件程序
Passing params to rails action mailer
我正在使用 action mailer 向获胜者发送电子邮件,@result
数组包含获胜参与者的记录,包括他们的电子邮件。
@result=>[#<Participant id: 47, admin_id: nil, sweepstake_id: 8, participant_name: "gomez", participant_email: "rakesh.k@birdvision.in", participant_number: "12131245421", ip_addr: "127.0.0.1", answer: "nice", reg_time: nil, entry_opt_id: nil, created_at: "2015-09-03 12:15:48", updated_at: "2015-09-07 12:12:53">, #<Participant id: 47, admin_id: nil, sweepstake_id: 8, participant_name: "gomez", participant_email: "rakesh.k@birdvision.in", participant_number: "12131245421", ip_addr: "127.0.0.1", answer: "nice", reg_time: nil, entry_opt_id: nil, created_at: "2015-09-03 12:15:48", updated_at: "2015-09-07 12:12:53">]
但是当我将结果从我的控制器传递给邮件程序时,结果现在只有 id 作为字符串。
Parameters: {"result"=>["47", "47"]
}。
我如何传递包含所有参与者记录的数组结果?
查看页面中的代码:
<%= link_to "Email Winners",email_winner_sweepstakes_path(:result=>@result) %>
控制器中的代码:
def email_winner
Rails.logger.info("***********************#{params.inspect}")
ParticipantMailer.winner_confirmation(params[:result]).deliver_now!
end
邮件程序中的代码:
def winner_confirmation(result)
@result = result
@url = 'http://example.com/login'
Rails.logger.info("=================mailer=================")
Rails.logger.info(@result.inspect)
@result.each do |i|
mail(to: i.participant_email, subject: 'Congratulation')
end
end
您不能在链接中传递 ruby 对象,因为这会触发不同 URI 上的新页面加载,并且在该地址中提供了 ID。您只需要传递 ID。
因此您的 ID 被传递到这里,您可以使用以下方法获取对象:
@result.each do |id|
participant = Participant.find(id)
mail(to: participant.participant_email, subject: 'Congratulation')
end
您必须在这一行中按 ID 查找获奖者:
<%= link_to "Email Winners", email_winner_sweepstakes_path(result: @result) %>
你所做的是制定 URL 并且你不能将对象存储为唯一的字符串,它所做的是它将在 @result
上调用 .id
解决这个问题:
在你的控制器中:
def email_winner
@results = Participant.where("id in (?)", params[:result])
ParticipantMailer.winner_confirmation(@results).deliver_now!
end
我正在使用 action mailer 向获胜者发送电子邮件,@result
数组包含获胜参与者的记录,包括他们的电子邮件。
@result=>[#<Participant id: 47, admin_id: nil, sweepstake_id: 8, participant_name: "gomez", participant_email: "rakesh.k@birdvision.in", participant_number: "12131245421", ip_addr: "127.0.0.1", answer: "nice", reg_time: nil, entry_opt_id: nil, created_at: "2015-09-03 12:15:48", updated_at: "2015-09-07 12:12:53">, #<Participant id: 47, admin_id: nil, sweepstake_id: 8, participant_name: "gomez", participant_email: "rakesh.k@birdvision.in", participant_number: "12131245421", ip_addr: "127.0.0.1", answer: "nice", reg_time: nil, entry_opt_id: nil, created_at: "2015-09-03 12:15:48", updated_at: "2015-09-07 12:12:53">]
但是当我将结果从我的控制器传递给邮件程序时,结果现在只有 id 作为字符串。
Parameters: {"result"=>["47", "47"]
}。
我如何传递包含所有参与者记录的数组结果?
查看页面中的代码:
<%= link_to "Email Winners",email_winner_sweepstakes_path(:result=>@result) %>
控制器中的代码:
def email_winner
Rails.logger.info("***********************#{params.inspect}")
ParticipantMailer.winner_confirmation(params[:result]).deliver_now!
end
邮件程序中的代码:
def winner_confirmation(result)
@result = result
@url = 'http://example.com/login'
Rails.logger.info("=================mailer=================")
Rails.logger.info(@result.inspect)
@result.each do |i|
mail(to: i.participant_email, subject: 'Congratulation')
end
end
您不能在链接中传递 ruby 对象,因为这会触发不同 URI 上的新页面加载,并且在该地址中提供了 ID。您只需要传递 ID。
因此您的 ID 被传递到这里,您可以使用以下方法获取对象:
@result.each do |id|
participant = Participant.find(id)
mail(to: participant.participant_email, subject: 'Congratulation')
end
您必须在这一行中按 ID 查找获奖者:
<%= link_to "Email Winners", email_winner_sweepstakes_path(result: @result) %>
你所做的是制定 URL 并且你不能将对象存储为唯一的字符串,它所做的是它将在 @result
.id
解决这个问题:
在你的控制器中:
def email_winner
@results = Participant.where("id in (?)", params[:result])
ParticipantMailer.winner_confirmation(@results).deliver_now!
end