This commit is contained in:
2026-03-03 00:35:31 +09:00
parent 55dcd4e1f3
commit da45bc95eb
+22 -6
View File
@@ -30,8 +30,20 @@ class PostsController < ApplicationController
offset = (page - 1) * limit offset = (page - 1) * limit
pt_max_sql =
PostTag
.select('post_id, MAX(updated_at) AS max_updated_at')
.group('post_id')
.to_sql
updated_at_all_sql =
'GREATEST(posts.updated_at,' +
'COALESCE(pt_max.max_updated_at, posts.updated_at))'
q = q =
filtered_posts filtered_posts
.joins("LEFT JOIN (#{ pt_max_sql }) pt_max ON pt_max.post_id = posts.id")
.reselect('posts.*', Arel.sql("#{ updated_at_all_sql } AS updated_at_all"))
.preload(tags: { tag_name: :wiki_page }) .preload(tags: { tag_name: :wiki_page })
.with_attached_thumbnail .with_attached_thumbnail
@@ -45,8 +57,12 @@ class PostsController < ApplicationController
end end
q = q.where('posts.created_at >= ?', created_between[0]) if created_between[0] q = q.where('posts.created_at >= ?', created_between[0]) if created_between[0]
q = q.where('posts.created_at <= ?', created_between[1]) if created_between[1] q = q.where('posts.created_at <= ?', created_between[1]) if created_between[1]
q = q.where('posts.updated_at >= ?', updated_between[0]) if updated_between[0] if updated_between[0]
q = q.where('posts.updated_at <= ?', updated_between[1]) if updated_between[1] q = q.where("#{ updated_at_all_sql } >= ?", updated_between[0])
end
if updated_between[1]
q = q.where("#{ updated_at_all_sql } <= ?", updated_between[1])
end
sort_sql = sort_sql =
if order[0] == 'original_created_at' if order[0] == 'original_created_at'
@@ -57,12 +73,12 @@ class PostsController < ApplicationController
else else
"posts.#{ order[0] } #{ order[1] }" "posts.#{ order[0] } #{ order[1] }"
end end
posts = q.select('posts.*') posts = q.order(Arel.sql("#{ sort_sql }")).limit(limit).offset(offset).to_a
.order(Arel.sql("#{ sort_sql }"))
.limit(limit).offset(offset).to_a q = q.except(:select, :order)
render json: { posts: posts.map { |post| render json: { posts: posts.map { |post|
PostRepr.base(post).tap do |json| PostRepr.base(post).merge(updated_at: post.updated_at_all).tap do |json|
json['thumbnail'] = json['thumbnail'] =
if post.thumbnail.attached? if post.thumbnail.attached?
rails_storage_proxy_url(post.thumbnail, only_path: false) rails_storage_proxy_url(post.thumbnail, only_path: false)