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