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