2011-07-09 128 views
1

我有一個rails模型,有一系列屬性(列),我不想爲每個選擇請求加載。所以我需要做的就是獲得它,這樣如果試圖訪問某個屬性(通過getter方法),那麼它將執行select語句來從數據庫中獲取所有列。Rails需要的lazyload屬性

我的問題是,當我從數據庫中獲取列時,是否有一種方法可以將這些屬性值與activerecord值一起使用,而無需使用for循環來應用每個屬性值?

+0

你能給我們舉個例子說明你到目前爲止有什麼?我無法想象它。 –

回答

4

試試這樣說:

def Person < ActiveRecord::Base 
    def method_missing(method_id, *args, &block) 
    begin 
     super 
    rescue 
     reload 
     super 
    end 
    end 
end 

然後開始加載的記錄,像這樣(例如):

person = Person.select(:id).find(20) 

當你這樣做

person.name 

那麼就應該打method_missing並在失敗時重新加載記錄(包含所有屬性)。

+0

完美!正是我需要的!謝謝senoir! :) – matsko