0

ここに私のモデルがあります:

class Thing < Ohm::Model
  attribute :created_at
  index :created_at
end

日時 (created_at) でレコードを並べ替えることができません。

Thing.all.order_by(:created_at)
NoMethodError: undefined method `each' for #<RuntimeError:0x0000010537dec0>

内部的にはすべてが文字列として保存されていることを知っていますが、おそらくそれが問題です。ライブラリや一部の contrib gem にこれを行うためのものが何もないのは非常に奇妙に思えます。

なにか提案を?

4

1 に答える 1

2

タイムスタンプに使用している値によっては、並べ替えcreated_atが簡単になる場合があります。たとえば、 を使用すると、Time.now.utc.to_i次のようにレコードを並べ替えることができます。

Thing.all.sort_by(:created_at)

降順で並べ替えたい場合は、代わりに次のようにします。

Thing.all.sort_by(:created_at, :order => "DESC")

結果を反復するには、次を使用できますeach

Thing.all.sort_by(:created_at, :order => "DESC").each do |thing|
  printf("Thing created on %s\n", Time.at(thing.created_at.to_i))
end

ohm-contribgemをインストールすると、モデルに含めることができ、属性とOhm::Timestampsが追加および更新されます。created_atupdated_at

class Thing < Ohm::Model
  include Ohm::Timestamps

  index :created_at
end

次に、前の例のように並べ替えることができますcreated_atが、この場合created_at、モデルが作成されるたびに自動的に割り当てられるため、値を渡す必要はありません。

于 2014-08-20T14:13:25.547 に答える