У меня есть следующий Nokogiri задача грабель в моем Rails (3.1) Применение:Rails 3.1 создает запись, а не обновление?
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.find_all_by_time(nil).each do |call|
, а затем:
call.update_attribute(:time, time)
Тогда будет обновлять существующие записи, но я хочу, чтобы импортировать записи, которые уже не в нашей базе - на основе значения времени.
Любая помощь приветствуется!
Это именно то, что я имел в виду - спасибо! – dannymcc