2015-09-09 1 views
3

Я использую почтовую программу для почтовых ящиков, @result В массиве есть записи участников, которые выиграли, включая их электронную почту.Переходящие параметры к рельсам action mailer

@result=>[#<Participant id: 47, admin_id: nil, sweepstake_id: 8, participant_name: "gomez", participant_email: "[email protected]", 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: "[email protected]", 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">] 

Но когда я передаю результат от моего контроллера к почтовой программе, результат теперь имеет только идентификатор как строку. 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 

ответ

1

Вы должны найти победитель по ID, в этой строке:

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

, что вы делаете формулирует URL-адрес, и вы не можете хранить объекты в своей единственной строке и что он сделал, это будет называть .id по адресу @result

, чтобы исправить это:

в контроллере:

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

Вы не можете передавать рубин объекты в ссылках, потому что вызывает новая загрузка страницы на другой URI, и идентификаторы указаны в этом адресе. Вам нужно только пройти идентификаторы.

Поэтому ваши идентификаторы передаются здесь, вы можете получить объекты со следующим:

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