0

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/

4

1 に答える 1

1

次のように、必要な資格情報ごとに character_history にスコープを作成できます。

scope :first_less_than_12_hours_ago, lambda {where("date >= '#{12.hours.ago}'").order("date DESC").first}

scope :unknown_column_max, maximum(:unknown_column)

その後:

character.character_histories.first_less_than_12_hours_ago
character.character_histories.unknown_column_max
于 2012-08-12T21:25:44.410 に答える