1

我认为与其在父文档和嵌入文档中保留 nil/null 的某些属性(例如,如果不存在价格,则为订单总数),我最好根本不保存它们。如何在保存之前删除 nil 的属性?

# embedded order position for each order
class Orderitem
  include Mongoid::Document

  field :quantity, :type => Integer
  field :unit_price, :type => Integer
  field :total, :type => Integer
  field :economical_potential, :type => Integer

  embedded_in :order
  belongs_to :supplier
  belongs_to :item

  before_save :remove_empty_fields

  private

  def remove_empty_fields
    attributes.each do |attr_name, value|
      if value.nil?
        # don't save attribute
      end
    end
  end
end
4

2 回答 2

0

为什么要从模型中删除属性?在这种情况下,我会添加另一个名为 unit并添加:price为属性的模型。然后添加一个函数来Orderitem调用def total_of_unit,它将根据单位数量及其价格返回总数。

在代码中它看起来像这样:

class Orderitem
  ...
  field :quantity, :type => Integer
  # drop :unit_price
  # drop :total
  field :economical_potential, :type => Integer
  ...
  has_many :units
  ...
  def total
    @total = 0
    self.units.each do |unit|
      @total = @total + unit.price
    end
    return @total
  end
end

单位看起来像这样:

class Unit
  field :unit_price, :type => Integer
  belongs_to :Orderitem
end
于 2012-10-10T19:01:32.523 回答
-1

Mongoid 支持#unset,所以你可以使用这样的东西:

order_item.unset(:total)
于 2012-12-19T18:41:57.473 回答