Tob*_*ner 2 ruby-on-rails max associations ruby-on-rails-3.1
我有以下型号:
#equipment.rb
class Equipment < ActiveRecord::Base
belongs_to :odometer_type
has_many :odometers
end
#odometer.rb
class Odometer < ActiveRecord::Base
belongs_to :equipment
# I am currently doing this to find the last mileage entered (which is wrong too cause I want the mileage from the max date entered)
def self.current_reading(equipment)
all.where(:equipment_id => equipment.id).max(:mileage)
end
end
Run Code Online (Sandbox Code Playgroud)
在视图中看起来更糟糕,如下所示:
= @equipment.odometers.current_reading(@equipment)
Run Code Online (Sandbox Code Playgroud)
我认为应该有更好的方法来做到这一点,但我似乎无法提出或找到任何东西.老实说,我甚至不确定如何搜索这样的东西.
谢谢你的帮助.
如果你想要设备的最后插入里程表的里程数
# assuming autoincrement id
@equipment.odometers.order('odometers.id DESC').limit(1).first.mileage
# assuming created_at column
@equipment.odometers.order('odometers.created_at DESC').limit(1).first.mileage
Run Code Online (Sandbox Code Playgroud)
如果您想获取设备的最大里程表里程数:
@equipment.odometers.maximum(:mileage)
Run Code Online (Sandbox Code Playgroud)
由于这种Equipment has_many :odometers关系,在上面的代码中:equipment_id => equipment.id条件是隐含的.
您可能希望实现类似于计数器缓存的功能,只需要计算您采用最大值的计数,以加快查询速度.