Нужна помощь в понимании запроса активной записи рельсов - PullRequest
2 голосов
/ 20 марта 2012

У меня две модели

Клиент и транзакция

 Customer
     has_many :transactions

 Transaction
     belongs_to :customer

Теперь мне нужны все клиенты, имеющие

  • более 1 транзакции за последние 30 дней
  • ровно 1 транзакция за последние 30 дней

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

В продолжение ответа Скотта Шеа, я бы использовал несколько областей действия

 scope :one_recent_transaction, :conditions => lambda {
   includes(:transactions).where("transactions.date > ?", DateTime.now - 30.days).group("customer.id").having("COUNT(transactions.id) = 1")
 }

 scope :many_recent_transactions, :conditions => lambda {
   includes(:transactions).where("transactions.date > ?", DateTime.now - 30.days).group("customer.id").having("COUNT(transactions.id) > 1")
 }

Затем использовал бы их вот так

one_transaction = Customer.one_recent_transaction
many_transactions = Customer.many_recent_transactions
0 голосов
/ 20 марта 2012

Вы хотите использовать предложение HAVING. Я предлагаю (я предполагаю, немного не зная вашу модель точно):

@exactly_one = Customer.where("transaction_date between ? and >", Date.now, Date.now - 30).group("customer.id").having("count(transaction.id) = 1")

@exactly_one = Customer.where("transaction_date between ? and >", Date.now, Date.now - 30).group("customer.id").having("count(transaction.id) > 1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...