来自 ActiveRecord 关联的查询结果的自定义排序
Custom ordering for query results from ActiveRecord association
我最近将我的项目切换到 postgres,它以小而烦人的方式弄乱了我的 select 表单。
我有 2 个 select 字段,
<%= f.collection_select :state, State.all, :value, :name, {include_blank: '- Select State -'} %>
<%= f.grouped_collection_select :area, State.all, :areas, :name, :value, :name, {include_blank: '- Select Area -'} %>
第一个 select 字段包含一堆状态。第二个 select 字段包含一堆 Areas/Districts 按国家分组(optgroup)。
使用"seeds.rb",我插入了所有相关数据。一切都按字母顺序插入。
在 SQLite3 中,select 结果都是按字母顺序显示的。
但是,当我切换到 Postgrsql 时,我的 :area select 现在以相反的字母顺序显示其选项,这对用户体验来说很糟糕。
我还在 rails 控制台中使用以下查询测试了以下场景:
State.find("Texas").areas
SQLite3 结果:
[Area A, Area B, Area C]
Postgres 结果:
[Area C, Area B, Area A]
有什么方法可以让我在 "f.group_collection_select" 中使用 Postgres 获得与 SQLite3 相同的结果?
您可以在 has_many
关系中指定默认顺序。
class State < ActiveRecord::Base
has_many :areas, -> { order("areas.name ASC") }
end
在名称或 ID 上使用适当的顺序子句(我更喜欢名称)和区域的默认范围。
default_scope { order(:name :asc) }
您可以通过在 Area 模型中定义一个范围来做到这一点
参见:Grouped Collection Select Alphabetical Order Rails
我最近将我的项目切换到 postgres,它以小而烦人的方式弄乱了我的 select 表单。
我有 2 个 select 字段,
<%= f.collection_select :state, State.all, :value, :name, {include_blank: '- Select State -'} %>
<%= f.grouped_collection_select :area, State.all, :areas, :name, :value, :name, {include_blank: '- Select Area -'} %>
第一个 select 字段包含一堆状态。第二个 select 字段包含一堆 Areas/Districts 按国家分组(optgroup)。
使用"seeds.rb",我插入了所有相关数据。一切都按字母顺序插入。 在 SQLite3 中,select 结果都是按字母顺序显示的。 但是,当我切换到 Postgrsql 时,我的 :area select 现在以相反的字母顺序显示其选项,这对用户体验来说很糟糕。
我还在 rails 控制台中使用以下查询测试了以下场景:
State.find("Texas").areas
SQLite3 结果:
[Area A, Area B, Area C]
Postgres 结果:
[Area C, Area B, Area A]
有什么方法可以让我在 "f.group_collection_select" 中使用 Postgres 获得与 SQLite3 相同的结果?
您可以在 has_many
关系中指定默认顺序。
class State < ActiveRecord::Base
has_many :areas, -> { order("areas.name ASC") }
end
在名称或 ID 上使用适当的顺序子句(我更喜欢名称)和区域的默认范围。
default_scope { order(:name :asc) }
您可以通过在 Area 模型中定义一个范围来做到这一点
参见:Grouped Collection Select Alphabetical Order Rails