2010年5月20日木曜日

activescaffold の :select の sort

ActiveScaffold の form_ui = :select を指定した時に、意図した並び順でリストボックスを表示したい。
ActiveRecord にデフォルトの並び順が指定できるようになった。

class Hoge < ActiveRecord::Base
default_scope :order => 'id';
end

だから、activescaffold における form_ui = :select を指定した場合にアルファベット順でソートする挙動は、もう要らない。
helpers/association_helpers.rb を修正する。

# returns options for the given association as a collection of [id, label] pairs intended for the +options_for_select+ helper.
def options_for_association(association, include_all = false)
available_records = association_options_find(association, include_all ? nil : options_for_association_conditions(association))
available_records ||= []
# available_records.sort{|a,b| a.to_label <=> b.to_label}.collect { |model| [ model.to_label, model.id ] }
# already sorted by sql. so disable sorting.
available_records.collect { |model| [ model.to_label, model.id ] }
end

0 件のコメント: