Ruby on rails 3 Rails 3.1是否创建记录而不是更新?

Ruby on rails 3 Rails 3.1是否创建记录而不是更新?,ruby-on-rails-3,activerecord,nokogiri,record,Ruby On Rails 3,Activerecord,Nokogiri,Record,我在Rails(3.1)应用程序中有以下Nokogiri rake任务: desc "Import incoming calls" task :fetch_incomingcalls => :environment do # Logs into manage.dial9.co.uk and retrieved list of incoming calls. require 'rubygems' require 'mechanize' require 'lo

我在Rails(3.1)应用程序中有以下Nokogiri rake任务:

desc "Import incoming calls"
task :fetch_incomingcalls => :environment do

    # Logs into manage.dial9.co.uk and retrieved list of incoming calls.
    require 'rubygems'
    require 'mechanize'
    require 'logger'

    # Create a new mechanize object
    agent = Mechanize.new

    # Load the dial9 website
    page = agent.get("https://manage.dial9.co.uk/login")

    # Select the first form
    form = agent.page.forms.first
    form.username = 'username
    form.password = 'password'

    # Submit the form
    page = form.submit form.buttons.first

    # Click on link called Call Logs
    page = agent.page.link_with(:text => "Call Logs").click

    # Click on link called Incoming Calls
    page = agent.page.link_with(:text => "Incoming Calls").click

    # Output results to file
    # output = File.open("output.html", "w") { |file|  file << page.search("tbody td").text.strip }

    # Add each row to a new call record
    page = agent.page.search("table tbody tr").each do |row|
      next if (!row.at('td'))
      time, source, destination, duration = row.search('td').map{ |td| td.text.strip }
      Call.create!(:time => time, :source => source, :destination => destination, :duration => duration)
    end
end
然后:

call.update_attribute(:time, time)
然后它将更新现有记录,但我希望它根据时间值导入数据库中不存在的记录

感谢您的帮助

你是这个意思吗

# Add each row to a new call record
page = agent.page.search("table tbody tr").each do |row|
  next if (!row.at('td'))
  time, source, destination, duration = row.search('td').map{ |td| td.text.strip }
  call = Call.find_or_create_by_time(time)
  call.update_attributes({:time => time, :source => source, :destination => destination, :duration => duration})
end
你是说这个吗

# Add each row to a new call record
page = agent.page.search("table tbody tr").each do |row|
  next if (!row.at('td'))
  time, source, destination, duration = row.search('td').map{ |td| td.text.strip }
  call = Call.find_or_create_by_time(time)
  call.update_attributes({:time => time, :source => source, :destination => destination, :duration => duration})
end