В моем приложении у меня есть 3 модели User
, Visit
, Post
. Чего я хочу добиться - это выбрать visits
& posts
, который принадлежит user
, где created_at
находится между 2 датами и group
их к day (я использую groupdate
для group_by_day
) и вернуть count
на visits
& posts
за этот день.
Я попробовал несколько без удачи:
User.joins(:visits,:posts).where("visits.user_id = ?, posts.user_id = ?", current_user.id, current_user.id)
.where("visits.created_at >= ? AND visits.created_at <= ?", 15.days.ago.midnight.in_time_zone("Berlin"), 2.days.ago.midnight.in_time_zone("Berlin"))
.where("posts.created_at >= ? AND posts.created_at <= ?", 15.days.ago.midnight.in_time_zone("Berlin"), 2.days.ago.midnight.in_time_zone("Berlin"))
.group_by_day(:created_at, range: 15.days.ago.midnight.in_time_zone("Berlin")..Time.now.in_time_zone("Berlin"), format: "%d %b")
.count
Это дало мне: ActiveRecord::StatementInvalid
SQLite3::SQLException: row value misused: SELECT COUNT(*) AS count_all, strftime('%Y-%m-%d 00:00:00 UTC', "users"."created_at") AS strftime_y_m_d_00_00_00_utc_users_created_at FROM "users" INNER JOIN "visits" ON "visits"."user_id" = "users"."id" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" WHERE (visits.user_id = 1, posts.user_id = 1) AND (visits.created_at >= '2020-01-20 00:00:00' AND visits.created_at <= '2020-02-02 00:00:00') AND (posts.created_at >= '2020-01-20 00:00:00' AND posts.created_at <= '2020-02-02 00:00:00') AND ("users"."created_at" >= '2020-01-20 00:00:00' AND "users"."created_at" <= '2020-02-04 19:03:28.383850') GROUP BY strftime('%Y-%m-%d 00:00:00 UTC', "users"."created_at")
Мои модели:
class Visit < ApplicationRecord
belongs_to :user
end
class Post < ApplicationRecord
belongs_to :user
end
class User < ApplicationRecord
has_many :visits
has_many :posts
end
Я искал вокруг и попробовал несколько разных способов без удачи. Любые рельсы помогают просто обычный sql
или наконечник высоко ценится и заранее спасибо!