2012-11-21 70 views
1

方法紅寶石我有這個類:場VS在軌道上

class User 
    include Mongoid::Document 
    field :revenues, :type => Integer, :default => nil 
    attr_accessible :revenues 
    #now method 
    def revenues 
    return 1 
    end 
end 

爲什麼在控制檯我得到1代替nil

1.9.3-p125 :002 > u.revenues 
=> 1 

哪個有優先級,方法還是字段?我如何創建一個與字段相同的特性的方法?

+0

可能重複://計算器.com/questions/7306472/override-models-setters-and-getters-in-mongoid) –

+0

重複,但請注意當前標記的答案並非最正確的答案。使用建議'super'的答案。 – numbers1311407

回答

0

field宏在Mongoid :: Document中定義。它既不是來自Ruby的合成特徵,也不是來自Rails。

什麼是你的代碼發生如下:

  1. field功能爲您創建一些方法,其中一個被稱爲revenues
  2. 當您創建另一個名爲revenues的方法時,您實際上覆蓋了以前定義的方法,因此使其無效。

簡短的回答:我不明白一個有關Mongoid的zip,但有可能你的域仍然存在,即使你再次定義了oce後,方法名爲revenues。唯一的缺點是你不能通過調用myUser.revenues來訪問它。

嘗試進行測試:用符號some_user[:revenues]訪問現場,看到發生什麼:)

問候

[覆蓋模型在Mongoid getter和setter方法(HTTP的