Рельсы выбирают и заказывают - PullRequest
1 голос
/ 18 июня 2011

Я пытаюсь выбрать подсчет столбцов в ассоциации, и это не похоже на работу. Вот мой код:

scope :search, lambda { |search, order_syntax|
    select("*, COUNT(payment_notifications.p_type) AS number_of_objects")
    {
      :conditions =>
      ['items.title LIKE ? OR items.desc LIKE ? OR taggings.context LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"],
      :include => [:taggings, :payment_notifications, :user],
      :order => 'number_of_objects'
    }
  }      

То, чего я пытаюсь достичь, это: Я хочу сделать заказ по количеству покупок. Итак, допустим, это моя таблица payment_notifications:

item_id | p_type

2 | 'Платеж'

2 | 'Платеж'

6 | 'Платеж'

2 | 'Платеж'

3 | 'Платеж'

6 | 'Платеж'

ноль | 'Снятие'

Порядок должен быть таким: 2 6 3

Надеюсь, вы понимаете.

Заранее спасибо.

Ответы [ 3 ]

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

Нашел мое решение.Необходимо использовать счетчик кеша.Спасибо всем!

0 голосов
/ 18 июня 2011

Во-первых, вы должны использовать обычный метод вместо области видимости, так как запрос довольно сложный, и результат будет точно таким же (просто легче отформатировать).

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

Вот что я бы предложил (используя новый синтаксис цепочки Active Record). Я не проверял его, но он должен работать, если я понял ваш исходный запрос.

def search(term)
  select("*, COUNT(payment_notifications.p_type) AS number_of_objects").
    where('items.title LIKE ? OR items.desc LIKE ? OR taggings.context LIKE ?', "%#{term}%", "%#{term}%", "%#{term}%").
      includes(:taggings, :payment_notifications, :user).
        order('number_of_objects')
end
0 голосов
/ 18 июня 2011

Вы также должны включить itme_id в блок заказа

:order => 'item_id,number_of_objects'
...