Найдите карточки с сегодняшней датой, когда пользователь получает письма в RoR - PullRequest
1 голос
/ 18 июня 2020

Каждый день мне нужно отправлять письма пользователям с сегодняшними задачами.

Для этого мне нужно найти всех пользователей, которым разрешено отправлять письма, и среди этих пользователей найти все карточки, у которых есть крайний срок Cегодня. Результатом являются три элемента массива с нулевым значением. Как это сделать лучше и правильно?

    @users = User.all {|a| a.receive_emails true} 

    @user_cards = []
    @users.each_with_index do |user, index| 
      @user_cards[index] = user.cards.where(start_date: Date.today).find_each do |card|
       @user_cards[index] = card
      end
    end

Моя модель пользователя:

class Card < ApplicationRecord
  belongs_to :user
  # also has t.date "start_date"
end

Модель моей карты:

class User < ApplicationRecord
   has_many :cards, dependent: :destroy
   # also has t.boolean "receive_emails", default: false
end

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Что-то вроде @cards_to_send = Card.joins(:users).where("users.receive_emails = true").where(start_date: Date.today)

Посмотрите на https://guides.rubyonrails.org/active_record_querying.html#specifying -conditions-on-the-connected-tables документы о том, как делать запросы к объединенной таблице.

1 голос
/ 18 июня 2020

Вы можете сделать это с помощью соединения SQL следующим образом

User.joins(:cards).where(receive_emails: true, cards: { start_date: Date.today })

https://guides.rubyonrails.org/active_record_querying.html#joining -таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...