[英]Class method or named_scope?
我想在我目前正在从事的项目中发表您的意见。
class Product
has_many :orders
end
class Order
attr_accessor :deliverable # to contain temporary data on how many items can be delivered for this order
belongs_to :product
end
我想以某种方式拥有
Order.all_deliverable
将计算产品的数量,从订单列表中减去,直到产品为空或该产品不再有订单
为了显示
Product A, quantity: 20
Product B, quantity: 0
Order 1, require Product A, quantity: 12
Order 2, require Product B, quantity: 10
Order 3, require Product A, quantity: 100
因此,如果我致电Order.all_deliverable,它将给
Order 1, deliverable:12
Order 3, deliverable: 8 #(20-12)
我一直在考虑使用named_scope,但是我认为逻辑太复杂而无法放在named_scope中。 有什么建议吗?
all_deliverable的伪代码将如下所示:转到每个订单,找到特定产品的剩余数量,将产品减去最大订单量,如果产品数量不足,则将最大产品添加到订单末尾
根据我在网上阅读的内容,named_scope主要类似于find,并且没有很多方法调用和循环。
我会使用一个类方法。 命名作用域非常适合添加到通常传递给要find
的选项列表中。 您应该使它们尽可能简单,以便调用者可以在特定上下文中以有意义的方式将它们链接在一起,并允许范围被重用。
除了设计,我不确定这是否仍可以用作命名范围:
如果您只想在命名范围内操作事物,可以这样做:
named_scope :foobar, lambda {
# do anything here.
# return hash with options for the named scope
{
:order => whatever,
:limit => 50
}
}
请注意,Rails 3 弃用了activerecord的长期使用部分 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.