如何防止rake任务中的重复?我试着写一些东西但是完全是空白的。
我想检查列Date是否与今天的日期匹配,如果这是真的,那么只需使用抓取的数据更新列,除非使用抓取的数据创建新行。
desc "Importer statistikker"
namespace :reklamer do
task :import_stats => :environment do
require 'Mechanize'
agent = WWW::Mechanize.new
agent.get("http://www.iqmedier.dk")
form = agent.page.forms.first
form.Username = 'username'
form.Password = 'password'
form.submit
agent.page.link_with(:href => "/Publisher/Stats").click
form = agent.page.forms.first
form.submit
@stats = agent.page.search('//tr')[-2].search('td').map{ |n| n.text }
if Reklamer.find(:all) where column is = Date.today if turns true
then update that row with @stats
else
Reklamer.create!(:virksomhed => 'Iqmedier', :dato => @stats[0], :unik_klik => @stats[1], :klik => @stats[2].to_i, :unik_vis => @stats[3], :vis => @stats[4], :leads => @stats[5], :ordre => @stats[6], :cpc => @stats[7], :earn => @stats[8])
end
end
end
祝你好运, Rails初学者
答案 0 :(得分:0)
以下是您可能想要做的事情:
existing = Reklamer.find(:first, :conditions => {:column => Date.today})
if existing.nil?
Reklamer.create! :virksomhed => 'Iqmedier', :dato => @stats[0], ...
else
existing.update_attributes :virksomhed => 'Iqmedier', :dato => @stats[0], ...
end
此代码将检查Reklamer对象是否已存在且列等于Date.today。然后它将更新现有的或创建一个新的。