2014-08-27 49 views
3

我正在構建一個Ruby on Rails應用程序,該應用程序利用Mongoid gem通過Mongodb存儲數據。嘗試插入Mongodb時出現「消息不包含任何文檔」

我的問題來源於此耙子任務:

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

task :scrape => :environment do 

    page = Nokogiri::HTML(open('https://maps.google.com/maps/ms?ie=UTF8&hl=en&source=embed&dg=feature&authuser=0&msa=0&output=kml&msid=208523333872813891131.0004c02beb4f2788337d0')) 

    page.css("coordinates").each do |coords|  
    coords = coords.text.split("\n") 
    coords.each do |coord| 
     array = coord.strip.split(',') 
     array[0] = array[0].to_f 
     array[1] = array[1].to_f 
     if (array[0] != 0 && array[1] !=0) 
     puts array[0] 
     puts array[1] 
     s = Submission.new(array[0], array[1], "Calfire", nil) 
     s.insert 
     end 
    end 
    end 
end 

s.insert試圖把從URL所採取的信息,創建一個Submission的實例,然後將其插入MongoDB的數據庫。每次我在終端運行rake scrape時,出現以下錯誤,因爲它試圖將Submission保存在數據庫中。

-122.952888 
40.741924 
rake aborted! 
Moped::Errors::OperationFailure: The operation: #<Moped::Protocol::Command 
    @length=83 
    @request_id=3 
    @response_to=0 
    @op_code=2004 
    @flags=[] 
    @full_collection_name="fireapp_development.$cmd" 
    @skip=0 
    @limit=-1 
    @selector={:getlasterror=>1, :w=>1} 
    @fields=nil> 
failed with error 13066: "Message contains no documents" 

我是相當新的Ruby和MongoDB的,所以如果任何其他代碼將是有益的,它可以用它更新這個帖子。我試圖設置一個新的應用程序/腳手架,看看是否能解決它,但沒有任何改變。我也嘗試通過終端保存一個Submission的實例,但這也不起作用。

當使用Google的解決方案,我遇到了這個討論: https://groups.google.com/forum/#!topic/mongodb-user/kg-wK56_JkQ

這表明,我可能沒有任何的查詢,但puts線路中的Ruby代碼清楚地輸出到終端。任何幫助是極大的讚賞。

EDIT 1:

的問題進行了通過適當地格式化s.create線以及去除所述s.insert線固定:

Submission模型

class Submission 
    include Mongoid::Document 
    field :lat, type: Float 
    field :long, type: Float 
    field :image, type: Moped::BSON::Binary 
    field :category, type: String 
end 

EDIT 2中的字段。

回答

2

標準用法是Model.create(attributes),你應該只是做:

s = Submission.create(:lat => array[0], :long => array[1], :category => 'Calfire') 
# No Submission.new, no s.insert, just create and check s.valid? or use create! 

我懷疑Submission.new並不真正知道,所以你可能是某種困惑廢話什麼與所有這些位置參數做在s。可推測的Submission.new正試圖解釋論點,並默默地失敗。

+0

我將編輯原始帖子以添加「提交」模型,並感謝您的回覆,我會嘗試它。 – 2014-08-27 23:09:27

+0

如果你看看我原來的帖子上的編輯,你可以看到'提交'模型。我試圖做's = Submission.create(:lat => array [0],:long => array [1],:category =>'Calfire',:image => nil)'但我得到錯誤我有一個太少的論點。有任何想法嗎? – 2014-08-28 03:45:33

+0

什麼是確切的錯誤信息? – 2014-08-28 03:48:58

相關問題