我有一个项目,要求在列表中以id顺序在不同页面中显示集合或关联。该数据库是PostgreSQL。
通常,默认情况下,数据将按照ID的顺序存储。但是,我的数据库不是那样,如果您不应用订单,则总是以不同的顺序返回,即[1432、1430、1401、1400]。
当前,我必须手动为每个关联添加订单范围。但这看起来很挑剔。即使在一个模型中,我也必须多次添加。
class A
has_many :xxx, -> { order(:id)}
has_many :yyy, -> { order(:id)}
has_many :zzz, -> { order(:id)}
end
class B
has_many :aaa, -> { order(:id)}
has_many :bbb, -> { order(:id)}
has_many :xxx, -> { order(:id)}
end
...
因此,我正在寻找更好的解决方案。我能想到的一种解决方案是将default_scope
添加到ActiveRecord::Base
类。但是我听说default_scope
是反党派的吗?
class ApplicationRecord < ActiveRecord::Base
default_scope { order(:id) }
end
随时给我任何建议。谢谢。
答案 0 :(得分:0)
对于您的情况,default_scope是一个不错的选择,但是如果您不想使用default_scope,则可以使用模型关注点并在关注点中定义范围,并将其包含在模型中。
https://api.rubyonrails.org/classes/ActiveSupport/Concern.html
module DefaultScope
extend ActiveSupport::Concern
included do
scope :asc_order, -> { order(id: :asc) }
end
end
class ModelName < ApplicationRecord
include DefaultScope
end