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

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

Если эти критерии верны, я пытаюсь выполнить do l oop и вернуть результат в массив .

Затем я пытаюсь использовать это для l oop через этот массив и отправить электронное письмо на каждое электронное письмо в массиве.

Я попытался назначить переменную 'emails' для этого массив, в котором я передаю этот код в

emails = [User.where(:state => 'Arizona').each]

Что не работает, потому что, когда я делаю следующее ... электронные письма не отправляются

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

Затем я попытался сделайте al oop и сохраните эти результаты в переменной

    User.where(:state => 'Arizona').each do |u|
     emails = u.email
    end

Еще раз, когда я делаю этот следующий код, электронные письма не отправляются

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

FYI - все остальное работает нормально с остальной частью моей программы, электронные письма определенно уходят нормально, когда я не использую этот код. Например, если я сделаю это:

emails = ['a@gmail.com','b@gmail.com']

, массив будет работать нормально, и тогда я смогу сделать это ..

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

, а электронное письмо с кодом будет отправлено на a@gmail.com и b@gmail.com. Итак, опять же, реальный вопрос заключается в том, как я oop через тех пользователей, у которых эти критерии верны, и сохраняю их в массиве, подобном этому, чтобы я мог запускать эти электронные письма. Каждый из них выполняет код и заставляет его работать?

Ответы [ 2 ]

3 голосов
/ 06 августа 2020

Просто используйте pluck

User.where(:state => 'Arizona').pluck(:email)
=>  ["a@gmail.com", "b@gmail.com"]
2 голосов
/ 06 августа 2020
  User.where(:state => 'Arizona').each do |u|
     emails = u.email
  end

В приведенном выше logi c, на каждой итерации электронные письма будут перезаписаны электронным письмом итерации.

Вы должны вставить электронные письма в массив, чтобы сделать logi c как и ожидалось.

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

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

   User.where(:state => 'Arizona').each do |u|
      emails = u.email
      p emails, "emails" # To check the value stored in the emails.
   end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...