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