我是Rails的新手,我正试图将我的应用程序连接到第三方API(它没有Rails的gem或插件)。
理想情况下,我希望能够做的是解析数据(我听说过关于Nokogiri的好东西,但不知道如何使用它来做我想做的事情。),然后插入到数据库中。
有人能给我指路吗?欢呼。
更新:
Rake任务:
task :fetch_flyers => :environment do
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::XML(open(url))
events = doc.search('//event')
events.each do |event|
@data = Event.new(
:name => event.at('name').text,
:date => '2011-09-18',
:time => '17:00',
:description => event.at('long_description').text,
:address => event.at('street').text,
:postcode => event.at('postcode').text,
:price => event.at('costs').text,
:user_id => 1,
:genre_id => 1,
:town_id => 1)
@data.save
if @data.save
puts "Success"
else
puts "This didn't save, F***"
end
end
end
我已经在我的代码中指定了URL,只是从这个代码粘贴中隐藏了它。这段代码不起作用。我怎么也弄不明白为什么。所有我得到的是终端输出说"这没有保存,F**这意味着由于某种原因事件没有被保存。有人能解释一下吗?
更新2:
我已经检查了URL是正确的,并检查了XML被正确解析使用:
# Printing Out the Variables to make sure they work.
puts @name
puts @date
puts @time
puts @desc
puts @address
puts @postcode
puts @price
puts @user
puts @genre
puts @town
. .它成功地打印出终端中的值。但是,它仍然不能插入到我的数据库中。
My Model如下:
belongs_to :user
belongs_to :genre
belongs_to :town
has_attached_file :image, :styles => { :grid => '90x128#', :list => '140x200#', :full => '400x548'}
validates_attachment_content_type :image, :content_type => ['image/jpeg', 'image/png']
before_post_process :normalise_file_name
validates :name, :presence => true
validates :date, :presence => true
validates :time, :presence => true
validates :description, :presence => true
validates :address, :presence => true
validates :town, :presence => true
validates :postcode, :presence => true
validates :price, :presence => true
validates :user_id, :presence => true
validates :viewcount, :presence => true
我的Development.log文件只显示了以下内容:
[1m[35mTown Load (0.1ms)[0m SELECT "towns".* FROM "towns" WHERE "towns"."id" = 1 LIMIT 1
[1m[36mTown Load (0.1ms)[0m [1mSELECT "towns".* FROM "towns" WHERE "towns"."id" = 1 LIMIT 1[0m
[1m[35mTown Load (0.1ms)[0m SELECT "towns".* FROM "towns" WHERE "towns"."id" = 1 LIMIT 1
[1m[36mTown Load (0.1ms)[0m [1mSELECT "towns".* FROM "towns" WHERE "towns"."id" = 1 LIMIT 1[0m
[1m[35mTown Load (0.1ms)[0m SELECT "towns".* FROM "towns" WHERE "towns"."id" = 1 LIMIT 1
[1m[36mTown Load (0.1ms)[0m [1mSELECT "towns".* FROM "towns" WHERE "towns"."id" = 1 LIMIT 1[0m
[1m[35mTown Load (0.1ms)[0m SELECT "towns".* FROM "towns" WHERE "towns"."id" = 1 LIMIT 1
.......
每次我尝试运行rake任务。这有什么意义吗?
当使用nokogiri时,您可以指定css或xpath选择器,如:
doc = Nokogiri::XML(xml_string)
events = doc.search('//event')
events.each do |event|
puts event.at('short_description')
end
另外,请查看nokogiri介绍教程
我将在获得URL后放置一个看跌,在定义events
后放置另一个看跌,以查看是否有任何数据在第一个实例中返回。然后我会检查事件模型,看看是否有任何验证没有得到满足——模型是否需要唯一的user_id或其他东西。我还将data设置为非实例变量,看看这是否会产生影响。我会检查那些时间格式不会在模型中造成错误。
我只是看到你的日志,发现你的事件模型确实与城镇模型有has_many关系,并且在你的事件表中也包含town_id列。所以我认为这可能是问题,因为它试图得到town_id和保存镇的外键在您的事件表。但它没有得到任何,所以它总是回滚。如果你想的话,试着**
<@data.save !
英斯达/strong>
@data.save
谢谢