Rails 3 - Как мне присоединиться к таблице и отфильтровать за последние X дней? - PullRequest
1 голос
/ 28 января 2012

У меня есть клиенты, у которых есть транзакции has_many.Я хочу выбрать всех Клиентов, у которых не было транзакций за последние 30 дней (Транзакция имеет дату транзакции) и отобразить имя клиента и дату последней транзакции.

Как мне выполнить этот запрос в рельсах?

Ответы [ 3 ]

2 голосов
/ 28 января 2012

В вашей модели транзакции:

scope :trans_order => (:order => "transaction date ASC")

В вашем контроллере

@inactive_clients = 
Client(:include => :transactions).where
("max(transaction_date) < ? AND transaction_date IS NOT NULL", 
Time.now - 30.days)

Тогда по вашему мнению:

@inactive_clients .each |client|
  = client.name
  = client.transactions.trans_order.last.transaction_date
end
1 голос
/ 28 января 2012
@client_transactions = Transaction.includes(:client).where('transaction_date < ?', 30.days.ago).group(:client_id)
@client_transactions.each do |client_transaction| 
  puts "client is #{client_transaction.client.name}"
end
0 голосов
/ 28 января 2012

Я бы использовал предложение "не существует", например

@clients = Client.where("not exists (select 'x' from 
    transactions where transactions.client_id = clients.id 
    and transaction_date > ?)", 
  30.days.ago)
...