2013-05-06 40 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方法就成功了。