删除Mongoid before_save循环中的属性

时间:2012-10-10 17:01:05

标签: ruby-on-rails mongoid

我认为不是将父文件和嵌入文档中的某些属性保留为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

2 个答案:

答案 0 :(得分:0)

为什么要从模型中删除属性?在这种情况下,我会添加另一个名为unit的模型,并添加:price作为属性。然后向名为Orderitem的{​​{1}}添加一个函数,该函数将根据单位数量及其价格返回总计。

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

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

答案 1 :(得分:0)

Mongoid支持#unset,因此您可以使用以下内容:

order_item.unset(:total)