Archive for February, 2011

Model.find(array) で順序が狂う

rails 覚えたての頃に書いた以下のようなコード

def items(array)
array.map{ |i| Item.find(i) }
end

を、以下のように書き換えてハマる。

def items(array)
Item.find(array)
end

タイトルに答えを書いちゃったけど、find(array) は array の順序を保存しない。
array が sort されてれば大丈夫かと思ったが、 mysql では OK だが postgresql ではダメだった。
幸い僕のケースでは array が sort 済みのものだったので、 find(array, :order=>:id) で丸く収まったが、array が sort されてない場合には厄介そうだ。

list_tag で Array をリストに展開

あったらいいのに、ということで作った。ApplicationHelper とかに入れればOK.
array がnilや空のときには ul そのものが出ないのがポイント。

  # ex:
  #  < %= list_tag(:ul, ["menu1", "menu2"], :class=>"menu") %>
  # => 
  def list_tag(wrapper, array, *opt)
    return if array.to_a == []
    content_tag(wrapper, *opt) do
      array.inject(""){|s,i|
        s < < content_tag(:li, i)
      }.html_safe
    end
  end