1対多のときの順序

has_many関係にあるときの「多」の方に順序がついている場合、つまり明細行を表示順でアクセスしたいときなどに、これまで findしてからいったん Arrayに入れて表示順で sortして、みたいなことをやってて「ほんとにみんなこんな面倒くさいことやってんのかよ」と思ってたら、案の定、そんなことはしてませんでした。

has_manyで :order指定

class Member < ActiveRecord::Base
  has_many :mails, :order => "idx"
end

idxは mailsテーブルの表示順を保持しているフィールド名です。

Mail Load (0.010000)  SELECT * FROM `mails` WHERE (`mails`.stage_id = 1) ORDER BY idx

ログをみると、ちゃんと ORDER BYがついていて安心です。