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 に答える