2013-05-31 104 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} 

或者乾脆避免預先加載集合。