2013-05-06 42 views
1

我想使用Google自定義搜索API結果並使用Datamapper將它們添加到數據庫。使用.each創建新的Datamapper資源(數據庫條目)

我已經成功地設置和手動添加一些項目到數據庫,所以它看起來像是所有設置正確。

我正在使用HTTParty將調用作爲Google API返回JSON結果。然後我想採取該JSON並將每個鏈接添加到數據庫中。我正在嘗試使用。每個如下:

response["items"].each do |item| 
    i=DMapperModel.create(city: "London", link: item["link"]) 
    puts i 
    puts i.saved? 
end 

響應是一個持有HTTParty :: response的變量,「items」和「link」都是HTTParty :: response的子集。

puts i成功地把正確的DataMapper的資源(即<#DMapperModel city: 'London', link: 'example.com'>

puts i.saved?是檢查是否保存到數據庫i,這是返回false的那一刻...

因此,它是成功的將i設置爲DataMapper資源,但由於某種原因未將其保存到數據庫,任何人都可以看到我要出錯的位置?

回答

0

自己解決!

我將鏈接參數設置爲字符串,DataMapper默認設置的最大長度爲50個字符。我試圖添加的所有鏈接都長於50個字符,因此保存失敗。

通過將鏈接參數的最大長度設置爲2000個字符來解決此問題;

class CityLink 
    include DataMapper::Resource 
    property :id, Serial 
    property :city, String 
    property :link, String, *length: 2000* 
end 

我把2000個字符的長度從this page上DataMapper的文檔這對於URI參數類型和鏈接this SO question

一旦我設置了這個,上面的.each方法就成功了。