has_many
モデルの関連付けからいくつかのレコードを取得しようとしています。
has_many
別のトランザクション時に親に関するデータを記録するトランザクションの履歴のような一連のレコードに関連付けるモデルがあります。
class Character < ActiveRecord::Base
has_many :character_histories
end
class CharacterHistory < ActiveRecord::base
belongs_to :character
end
すべての「CharacterHistory」レコードを取得するのは簡単ですが、12、24 時間前などに作成された最初のレコードのみを含めたいので、その時間枠で行われた最後のトランザクションを確認できます。
追加のボーナスとして、関連付けに対して返されるすべてのレコードの列の最大値を取得できるようにしたいと思います...
ソリューション付きの更新
モデルに「Scoped Module」を追加しました。
class CharacterHistory < ActiveRecord::Base
module Scopes
def last
order("created_at DESC").first
end
def first_less_than_12_hours_ago
where("created_at <= '#{12.hours.ago}'").order("created_at DESC").first
end
def first_less_than_24_hours_ago
where("created_at <= '#{24.hours.ago}'").order("created_at DESC").first
end
def all_time_high
maximum(:value)
end
end
extend Scopes
end
これは、私がここで得たソリューションと、この記事から着想を得ました: http://www.railway.at/2010/03/09/named-scopes-are-dead/