#ruby-on-rails
#ruby-on-rails
Вопрос:
Следующий запрос должен сработать, но он не работает.
class Keyword
def self.popular_queries
t = Time.now
relation = Keyword.where(:created_at => (t.beginning_of_day..t.end_of_day))
relation = relation.group(:name)
relation = relation.select("name, COUNT(id) AS count_value")
relation.to_a
end
end
результат следующий без значения count
[#<Keyword name: "a">, #<Keyword name: "b">,
#<Keyword name: "c">, #<Keyword name: "d">]
таблица ключевых слов содержит только два столбца name
и идентификатор.
Решение заключается
def self.popular
t = Time.now
relation = Keyword.where(:created_at => (t.beginning_of_day..t.end_of_day))
relation = relation.group(:name)
relation = relation.select("name, created_at, count(*) as c1")
sql = relation.to_sql
self.connection.select_all(sql)
end
Ответ №1:
Проблема в том, что ваша Keyword
модель не знает, что count_value
такое, и вы создаете несколько Keyword
экземпляров на основе SQL-запроса. Когда ваши экземпляры создаются, они видят count_value
передаваемые им данные, но игнорируют их, поскольку у них нет count_value
свойства.
Если вы хотите запустить произвольный SQL и получить обратно простые данные, вам следует использовать select_rows
или аналогичные низкоуровневые методы.
Комментарии:
1. извините. Я должен был сказать, что в нем два столбца. имя и идентификатор.
2. обратите внимание, что sql не запускается. Он не показывает допустимый результат.
3. @Nadal: Что такое SQL, который создается за кулисами?
4. переключился на mysql и та же проблема. Ключевое слово.Загрузка популярного ключевого слова (1,8 мс) ВЫБЕРИТЕ name, created_at, считайте(*) как c1 ИЗ
keywords
WHERE (keywords
.created_at
МЕЖДУ ‘2011-04-14 04:00:00’ И ‘2011-04-15 03:59:59’) СГРУППИРОВАТЬ ПО имени => [#<Имя ключевого слова: «a», created_at: «2011-04-14 17:55:15»>, #< Имя ключевого слова: «b», created_at: «2011-04-14 17:55:15»>, #< Имя ключевого слова: «c», created_at: «2011-04-14 17:55:15»>, #< Имя ключевого слова: «d», created_at: «2011-04-14 17:55:15»>]5. Спасибо. это сделало это. Я обновил вопрос с ответом. Я посмотрю, примет ли rails core исправление для сбоя, если столбец не соответствует.