2012-10-10 59 views
1

刪除屬性,我計算過,而不是留在父母的某些屬性和嵌入文檔零/零(例如總,如果沒有價格存在的命令),我還是不救他們。如何刪除保存之前爲零的屬性?在Mongoid before_save環

# 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 

回答

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 
+1

這是計算總數的好方法。我想不保存爲零的屬性。例如,某人訂購一個沒有價格的物品,總數將爲零/無。而不是總共保存零/空,我想我不會保存屬性。對於父文檔,似乎我實際上不能保存nil/null值(nil的屬性不會保存),但對於嵌入式文檔,Mongoid會將它們保存爲「null」。我想最好是有一致的數據。 – migu

0

Mongoid支持#unset,所以你可以使用這樣的事情:

order_item.unset(:total)