Rails:包含来自关联的特定记录

时间:2012-08-12 20:40:14

标签: ruby-on-rails activerecord

我正在尝试从我的模型中的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/

1 个答案:

答案 0 :(得分:1)

您可以在character_histories中为您需要的每个凭据创建范围,如下所示:

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