Rails 4, SQLite 3: действует как сортировка голосов по результатам голосования на прошлой неделе

#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. Ура! Это именно тот случай 🙂