我是Rails的新手,并试图将我的应用程序连接到第三方API(它没有Rails的gem或插件)。Rails 3.0解析XML并插入到数据库中
理想情况下,我想要做的就是解析数据(我听说过关于Nokogiri的好东西,但不知道如何使用它来做我想做的事情,而不是因为缺乏尝试),然后将其插入到数据库中。
任何人都可以提供指导或指向正确的方向吗? 干杯。
UPDATE:
耙子任务:
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 * *这意味着由于某种原因没有被保存的事件。任何人都可以提供一些线索这光?
UPDATE 2:
我检查的网址是否正确,并已通过检查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
..这成功地打印出在终端的值不过,它仍不会插入我nto我的数据库。
我的模型如下:
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任务。这是否意味着什么?
如果我打算使用Rails 3利用这一点,在那里我会把这个instaed?特别是因为我希望每周都能像常规的cron工作那样运行? – Ammar
首先,你应该把'gem'nokogiri''加入Gemfile中。为了做例行公事,你应该写耙子任务,并把处理代码放在那里或者放在模型中。 – taro
我用我最近的发现更新了我的问题,请查看! – Ammar