mirror of https://github.com/mastodon/mastodon
Add `RankedTrend` concern for trends classes (#29388)
parent
98e3dc2578
commit
8429d07454
@ -0,0 +1,29 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RankedTrend
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
scope :by_rank, -> { order(rank: :desc) }
|
||||
scope :ranked_below, ->(value) { where(rank: ..value) }
|
||||
end
|
||||
|
||||
class_methods do
|
||||
def recalculate_ordered_rank
|
||||
connection
|
||||
.exec_update(<<~SQL.squish)
|
||||
UPDATE #{table_name}
|
||||
SET rank = inner_ordered.calculated_rank
|
||||
FROM (
|
||||
SELECT id, row_number() OVER w AS calculated_rank
|
||||
FROM #{table_name}
|
||||
WINDOW w AS (
|
||||
PARTITION BY language
|
||||
ORDER BY score DESC
|
||||
)
|
||||
) inner_ordered
|
||||
WHERE #{table_name}.id = inner_ordered.id
|
||||
SQL
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue