ActiveRecord关联的查询结果的自定义排序

时间:2015-02-13 15:02:48

标签: ruby-on-rails ruby postgresql activerecord sqlite

我最近将我的项目改为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;?

3 个答案:

答案 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)

您可以通过在区域模型中定义范围来实现此目的

请参阅:Grouped Collection Select Alphabetical Order Rails