Как мне получить доступ к отправленным параметрам в почтовой программе rails? - PullRequest
0 голосов
/ 06 августа 2020

У меня был предыдущий вопрос, который помог мне oop через всех пользователей, где встречается определенный вопрос.

Однако я понимаю, что не могу жестко закодировать это условие. Мне нужно как-то получить эти данные из отправленной формы, что, похоже, невозможно в почтовой программе.

Другими словами, я пытаюсь l oop через всех пользователей, где состояние пользователя равно home_state вводимого кандидата. В основном, когда кандидат создается, я хочу получить home_state этого кандидата, а затем l oop через всех пользователей, и для каждого пользователя, который находится в том же состоянии, что и этот кандидат, я хочу отправить им электронное письмо через эту почтовую программу.

Вот мой файл кандидата_mailer.rb

class CandidateMailer < ApplicationMailer
  default from: 'wesleycreations@gmail.com'

  def self.send_request(row)

    @candidate = Candidate.new(candidate_params) # if I can access this here, how to I create the 
                                                 # following array? 
    emails = []
    User.where(state: @candidate.home_state).each do |u|
      emails << u.email # To insert the user email into the array
    end

    emails.each do |email|
      new_request(email,row).deliver_now
    end
  end

  def new_request(email, row)
    @candidate = row
    mail(to: email, subject: 'New request')
  end
end

Но

@candidate = Candidate.new(candidate_params)

явно не работает, потому что параметры недоступны в почтовой программе.

Здесь, в файле кандидата_controller.rb, у меня есть это

def create
    @candidate = Candidate.new(candidate_params) #of course here I can access params
    if @candidate.save
      row = @candidate
      CandidateMailer.send_request(row)
    else
    render('new')
    end
end

Итак, вопрос в том, как мне получить доступ к параметрам в почтовой программе rails? А если я не могу, то как мне реорганизовать свой код, чтобы строки, проверяющие, соответствует ли пользователь определенному условию, выполнялись в контроллере?

1 Ответ

0 голосов
/ 07 августа 2020

Я смог понять это, сделав это. после того, как я сохранил кандидата, я сохранил кандидата в глобальной переменной. и ЗАТЕМ я отправляю почтовую программу.

  def create
    @candidate = Candidate.new(candidate_params)
    if @candidate.save
      row = @candidate
      $candidate = @candidate
      end
    CandidateMailer.send_request(row)
    else
    end
  end

Таким образом, почтовая программа имела доступ к новому кандидату, который был создан, и я мог проверить свое состояние там.

Итак, в моем mailer, когда я использую $ кандидата.home_state, он вернул правильное состояние, почта ушла, и я очень обрадовался:)

    emails = []
    User.where(state: $candidate.home_state).each do |u|
      emails << u.email # To insert the user email into the array
    end
...