#ruby-on-rails #ruby #sqlite #ruby-on-rails-4 #rubygems
#ruby-на-рельсах #ruby #sqlite #ruby-on-rails-4 #rubygems
Вопрос:
Я хотел бы отобразить самые популярные элементы за последние 7 дней.
Таким образом, я могу получить наибольшее количество голосов (за все время).:
@items = Item.all.order(cached_votes_up: :desc)
item.rb
class Recipe < ActiveRecord::Base
belongs_to :user
acts_as_votable
end
Есть ли способ получить наибольшее количество голосов за последнюю неделю?
Любая помощь приветствуется. Спасибо.
Ответ №1:
Я делаю это на основе того, что я вспомнил, когда некоторое время назад использовал драгоценный камень.
У вас есть две таблицы, items
и votes
голоса создаются по умолчанию, если acts_as_votable
используется драгоценный камень.
Чтобы объединить обе таблицы вместе
@join_table = Item.joins('INNER JOIN votes ON votes.votable_id = items.id')
// Я не использовал cached_votes_up
, когда использовал драгоценный камень. Я понятия не имею, что он хранит и для чего он нужен. Если это сработает, продолжайте ниже.
После того, как вы присоединились к таблице, теперь нам нужно отфильтровать элементы, которые были оценены за последние 7 дней.
@filter_table = @join_table.order(cached_votes_up: :desc).where(:updated_at => 7.day.ago..Time.now)
Возможно, вам потребуется немного изменить, поскольку у меня нет точных атрибутов таблицы. Дайте мне знать, если это то, что вы хотите.
Комментарии:
1. Я не знаю, но, насколько я понимаю, этот код просто ищет элементы, которые получили хотя бы один голос за последние семь дней, а затем упорядочивает их по их общему количеству голосов. Вместо этого я хочу только подсчитать голоса, сделанные на прошлой неделе. Пожалуйста, дайте мне знать, если я ошибаюсь. 🙂
2. @Gugubaight Если вы хотите его вычислить, вам следует использовать
count
. Затем он вернет подсчитанное значение за последние 7 дней.3. Это не работает, потому что тогда я получаю целое число, но я хочу получить отсортированные объекты, чтобы я мог перебирать их
4. Я думаю, что я наконец понял, что вы пытаетесь сделать. У вас есть две таблицы
items
иvotes
таблица, поскольку вы используетеActs_as_Votable
gem (votes
таблица генерируется gem). Вы пытаетесь найти, какой элемент набрал наибольшее количество голосов за последние 7 дней. В этом случае вам нужно объединить обаitems
иvotes
таблицу, чтобы получить элемент. Правильно ли я понимаю, что вы пытаетесь сделать?5. Ура! Это именно тот случай 🙂