2011-02-15 54 views
0

如何防止重复项在rake任务中?我试图写一些东西,但完全空白。Rails&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的初学者

+1

这将很快关闭,除非你问一个非常具体的问题。 – 2011-02-15 21:32:12

回答

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对象已经与列等于日期存在。今天。然后它将更新现有的或创建一个新的。