Скажите, у меня есть модель платы. Доски имеют много постов. Я просто хочу найти форумы с наибольшим количеством сообщений в течение (х) дней. Ниже мой чрезвычайно наивный подход к этому. С предоставленным кодом я получаю ошибку:
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "posts")
LINE 1: SELECT "boards".* FROM "boards" WHERE (board.posts.created_...
^
: SELECT "boards".* FROM "boards" WHERE (board.posts.created_at >= '2019-06-05 12:14:30.661233') LIMIT $1
Пожалуйста, дайте мне знать, если есть лучший способ сделать это, кроме ошибки, которую я получаю.
class Board < ApplicationRecord
has_many :posts
scope :trending, -> { includes(:posts).where('board.posts.created_at >= ?', Time.now-7.days).order(posts_count: :desc) }
end
class Post < ApplicationRecord
belongs_to :board, counter_cache: true
end
Обновление:
Поэтому мне удалось придумать рабочую область, но не уверен на 100%, является ли она наиболее оптимальной. Ваши мысли будут оценены:
scope :trending, -> { includes(:posts).where(posts: { created_at: Time.now - 7.days }).order(posts_count: :desc) }