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
4

1 回答 1

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}

或者干脆避免提前加载集合。

于 2013-05-31T16:32:56.410 回答