RoR - 将方法添加到依赖集合
RoR - add method to dependent collection
有两个 classes(Order
, Cart
), 与 [=13] 有相同的另一个 class (LineItem
) =]协会。
我可以获取像 items = @order.line_items
这样的记录,我想在该集合上添加一个方法,以便能够在 Cart
和 [=10] 上计算 items.total_price
=].
我知道 @order.line_items.to_a.sum(&:method)
,但有点复杂。
现在我在两个 class 中都有相同的方法,我想干掉它。可能吗?
您的解决方案 Module
将实现该行为。
在您的 app/models/concerns
文件夹中创建名为 priceable.rb
的文件
并将此代码放入
require 'active_support/concern'
module Priceable
extend ActiveSupport::Concern
included do
has_many :line_items
end
# instance methods on object that includes this module
def total_price
#logic
end
# class methods for class that will include module
module ClassMethods
# define class methods
end
end
在您的 model
order
中插入下一行代码,并在 cart
模型中
class Order < ActiveRecord::Base
include Priceable
# remove from here has_many :line_items
# it has been moved to the module
...
end
有两个 classes(Order
, Cart
), 与 [=13] 有相同的另一个 class (LineItem
) =]协会。
我可以获取像 items = @order.line_items
这样的记录,我想在该集合上添加一个方法,以便能够在 Cart
和 [=10] 上计算 items.total_price
=].
我知道 @order.line_items.to_a.sum(&:method)
,但有点复杂。
现在我在两个 class 中都有相同的方法,我想干掉它。可能吗?
您的解决方案 Module
将实现该行为。
在您的 app/models/concerns
文件夹中创建名为 priceable.rb
并将此代码放入
require 'active_support/concern'
module Priceable
extend ActiveSupport::Concern
included do
has_many :line_items
end
# instance methods on object that includes this module
def total_price
#logic
end
# class methods for class that will include module
module ClassMethods
# define class methods
end
end
在您的 model
order
中插入下一行代码,并在 cart
模型中
class Order < ActiveRecord::Base
include Priceable
# remove from here has_many :line_items
# it has been moved to the module
...
end