2011-07-09 63 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