This commit is contained in:
2026-03-01 15:05:40 +09:00
parent a088503272
commit 1350ae3d99
3 changed files with 77 additions and 22 deletions
+23 -5
View File
@@ -9,6 +9,19 @@ class PostsController < ApplicationController
created_between = params[:created_from].presence, params[:created_to].presence
updated_between = params[:updated_from].presence, params[:updated_to].presence
order = params[:order].to_s.split(':', 2).map(&:strip)
unless order[0].in?(['title', 'url', 'original_created_at', 'created_at', 'updated_at'])
order[0] = 'original_created_at'
end
unless order[1].in?(['asc', 'desc'])
order[1] =
if order[0].in?(['title', 'url'])
'asc'
else
'desc'
end
end
page = (params[:page].presence || 1).to_i
limit = (params[:limit].presence || 20).to_i
@@ -36,11 +49,16 @@ class PostsController < ApplicationController
q = q.where('posts.updated_at <= ?', updated_between[1]) if updated_between[1]
sort_sql =
'COALESCE(posts.original_created_before - INTERVAL 1 MINUTE,' +
'posts.original_created_from,' +
'posts.created_at)'
posts = q.select("posts.*, #{ sort_sql } AS sort_ts")
.order(Arel.sql("#{ sort_sql } DESC"))
if order[0] == 'original_created_at'
'COALESCE(posts.original_created_before - INTERVAL 1 MINUTE,' +
'posts.original_created_from,' +
'posts.created_at) ' +
order[1]
else
"posts.#{ order[0] } #{ order[1] }"
end
posts = q.select('posts.*')
.order(Arel.sql("#{ sort_sql }"))
.limit(limit).offset(offset).to_a
render json: { posts: posts.map { |post|