API にクエリを実行し、そのクエリを Mongo ドキュメントに格納しようとするアプリケーションがあります。ドキュメントからはかなり簡単に思えますが、ステップが欠けているようですが、何が問題なのかほとんどわかりません。あなたの一人が私を正しい方向に向けることができますか?ありがとう!
DB からいくつかのレコードを選択し、API を照会するループを実行する行があります。プログラムが次の行に到達すると、エラーundefined method
[]' for nil:NilClass` に遭遇します
EntityMetadata.where(id: c['id'].to_s).add_to_set(:mood, result["mood"])
コンソールはこれも出力します: MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1}
、どうやってそこにたどり着いたのかわかりません。
興味があるなら、これは完全なコードです
puts "Getting sentiment for all entities from Viralheat..."
api_key = '___________------_____-----'
puts "a"
base_uri 'viralheat.com/api/sentiment'
content_sql = 'SELECT content,id FROM entities'
puts content_sql
content = ActiveRecord::Base.connection.select_all(content_sql , "Entity Content")
query = {:api_key => api_key}
asdf = {}
content.each do |c|
puts c["content"]
puts "Getting Sentiment for " + c["content"].to_s
query[:text] = c["content"]
result = self.get('/review.json', :query => query)
puts "asdf"
EntityMetadata.where(id: c['id'].to_s).add_to_set(:mood, result["mood"])
puts "ss"
EntityMetadata.where(id: c['id'].to_s).add_to_set(:prob, result["prob"])
#update_mood_sql = "UPDATE entities SET mood = '#{result["mood"]}' WHERE id ='" + c["id"].to_s + "'"
#update_prob_sql = "UPDATE entities SET probability = '#{result["prob"]}' WHERE id ='" + c["id"].to_s + "'"
#ActiveRecord::Base.connection.update_sql(update_mood_sql, "Updating mood")
#ActiveRecord::Base.connection.update_sql(update_prob_sql, "Updating prob")
end
モデルコードは次のとおりです。
class EntityMetadata
include Mongoid::Document
field :_id, type: Integer
field :fingerprint, type: String
index({ fingerprint: 1 }, { sparse: true })
# TODO: change this to use the entity_id as the :_id field, to save space
# field :entity_id, type: Integer
# index({ entity_id: 1 }, { unique: true })
def entity
@entity ||= Entity.find_by_id(self._id)
end
end