2013-05-31 73 views
0

在更新我的数据库中的对象属性后,我似乎无法在后续的方法调用中检索值。在我尝试检索数据的时候,我已经确认属性已经在我的数据库中更新了。无法从数据库中提取对象更新的属性

def task 
    update_objects(data) 
    retrieve_data 
end 

def update_objects(data) 
    data.each do |item| 
    keyword = self.keywords.find_by_description(item.keyword) 
    keyword.update_attributes(:total_value => item.totalValue.to_f, :avg_revenue_per_transaction => item.revenuePerTransaction.to_f) 
    end 
end 

def retrieve_data 
    keywords = self.keywords # The updated attributes in keywords are nil 

    # Do stuff with keywords 
end 

回答

0

这是因为keywords收集有可能已经加载你打电话之前retrieve_data。但是,调用find_by_description不会使用加载的集合(因为它使用查询API)并直接从数据库中提取新对象。原始加载的集合不知道这一点。有几种方法来解决这个问题:

你可以调用reload从数据库刷新集合:

def retrieve_data 
    keywords = self.keywords(true) 
end 

或者不使用查询API,而是使用集合本身:

keyword = self.keywords.detect{|k| k.description == item.keyword} 

或者干脆避免预先加载集合。