无法从db中提取对象更新的属性

时间:2013-05-31 16:25:17

标签: ruby-on-rails ruby

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

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

1 个答案:

答案 0 :(得分: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}

或者只是提前避免加载收藏品。