2012-02-09 16 views
0

t.stringからt.datetimeに列(時間と呼ばれる)を変更した後、データベースを削除して再作成して移行を実行しました。Rails 3で列をdatetimeに変更した後にRakeスクリプトが機能しない

リモートWebサイトから情報をスクラップし、その情報を文字列ではなくdatetimeに調整した時間列に基づいて新しいレコードに追加するスクリプトを毎分実行するように設定しました。

# 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 

時間の列を整数に変更すると、スクリプトは情報をまったくインポートしていないようです。私はこの仕事をやり直すために必要なステップがあるのか​​どうか疑問に思いましたか?

私のスキーマは次のようになります。

create_table "calls", :force => true do |t| 
    t.string "source" 
    t.string "duration" 
    t.datetime "time" 
    t.string "destination" 
    t.string "recording" 
    t.string "cost" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

答えて

3

をこの部分では、あなたが文字列としてtime変数を取得し、find_byにそれをしようと

time, source, destination, duration = row.search('td').map{ |td| td.text.strip } 
call = Call.find_or_create_by_time(time) 

。私は

call = Call.find_or_create_by_time(Time.parse(time)) 

のようななめらかでトリックを行うべきだと思う

関連する問題