我最近将我的项目改为postgres,它以一种小而恼人的方式弄乱我的选择表格。
我有2个选择字段,
<%= 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 -'} %>
第一个选择字段包含一堆状态。第二个选择字段包含按州分组的一组区域/区域(optgroup)。
使用&#34; seeds.rb&#34;,我插入了所有相关数据。一切都按字母顺序插入。 在SQLite3中,选择结果全部按字母顺序显示。 但是,当我换到Postgrsql时,我的:area select现在以反向字母顺序显示其选项,这对于用户体验来说很糟糕。
我还在rails控制台中使用以下查询测试了以下场景:
State.find("Texas").areas
SQLite3结果:
[Area A, Area B, Area C]
Postgres结果:
[Area C, Area B, Area A]
有什么方法可以和Postgres一起使用SQLite3获得相同的结果,同时仍然使用我的&#34; f.group_collection_select&#34;?
答案 0 :(得分:2)
您可以在has_many
关系中指定默认顺序。
class State < ActiveRecord::Base
has_many :areas, -> { order("areas.name ASC") }
end
答案 1 :(得分:1)
在名称或id上使用order子句,以适当的方式(我更喜欢名字)和Area的默认范围。
default_scope { order(:name :asc) }
答案 2 :(得分:1)
您可以通过在区域模型中定义范围来实现此目的