将params传递给rails动作邮件程序

时间:2015-09-09 11:46:19

标签: ruby-on-rails ruby actionmailer

我正在使用动作邮件程序向电子邮件获胜者发送电子邮件,@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

2 个答案:

答案 0 :(得分:2)

你必须通过ID找到获胜者,在这一行:

<%= link_to "Email Winners", email_winner_sweepstakes_path(result: @result) %>

你所做的是制定网址而你不能存储对象唯一的字符串,它做了什么就会调用.id上的@result

解决这个问题:

在您的控制器中:

def email_winner
  @results = Participant.where("id in (?)", params[:result])
  ParticipantMailer.winner_confirmation(@results).deliver_now!
end

答案 1 :(得分:0)

您无法在链接中传递ruby对象,因为它会在不同的URI上触发新的页面加载,并在该地址中提供ID。你只需要传递id。

因此,您的ID在此处传递,您可以使用以下内容获取对象:

@result.each do |id|
  participant = Participant.find(id)
  mail(to: participant.participant_email, subject: 'Congratulation')
end