考虑以下模型..
class Product < ActiveRecord::Base
has_many :pricings
end
class Pricing < ActiveRecord::Base
belongs_to :server
end
定价是产品价格的历史跟踪表,因此随着时间的推移可能会捕获数百个价格点。我想添加的是一种只获得产品当前价格的方法。
虽然我可以像下面那样为模型添加has_one关系:
has_one :current_pricing, :class_name => "Pricing", :foreign_key => "product_id",
:order => 'created_at DESC'
这将取回当前产品的所有Pricings,然后返回第一条记录。
我正在寻找一种以更有效的方式实现这一目标的方法,并希望有人能够做出类似的投入或以前的经验。
答案 0 :(得分:2)
您可以使用命名范围。把它放在定价模型的顶部:
class Pricing < ActiveRecord::Base
named_scope :current, lambda { |product| { :conditions => { :product_id => product.id }, :order => 'created_at DESC', :limit => 1 } }
end
然后,要获得产品的当前定价,您可以调用“Pricing.current(product).first”。
除了定价范围之外,您还可以向Product模型添加一个存取方法,如下所示:
class Product < ActiveRecord::Base
def current_pricing
Pricing.current(self).first
end
end
答案 1 :(得分:1)
你正在寻找一个named_scope。在你的定价模型中定义它。用1参数product_id供给它。
named_scope :latest_price, lambda { |*args| {:conditions => {:product_id => args.first}, :order => "created_at DESC", :limit => 1} }
顺便提一下screencast。
答案 2 :(得分:0)
为查询添加:限制?