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し、属性として追加します。次に、ユニット数とその価格に基づいて合計を返す関数をOrderitemcalledに追加します。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 に答える