Rails で作成した新しいアプリケーションへのアクセスを使用して、古いアプリケーションからいくつかのデータをプッシュする必要があります。Access データを .xls にエクスポートし、 gem でアクセスしましたroo
。
それはかなりうまく動作し、スクリプトを作成し、結果を出力することで、すべて適切に実行されると確信しています.Railsアプリケーションモデルにアクセスして、データベース内にこのデータを自動的に挿入したいと思います.
このファイルを自分の rails のlib/
ディレクトリの下に置いてみたところ、ファイル内で必要になりましたenvironments/development.rb
が、ruby ファイルをインポートすると、処理が必要な変数が見つからないと表示されます。
完全を期すために、これは、xls からデータを抽出し、新しいデータベース スキーマに一致するように編集するために開発したソース コード全体です。
# encoding: utf-8
require 'rubygems'
require 'roo'
user_id_conversion = {119 => 10, 152 => 11, 145 => 12, 161 => 13, 163 => 14, 158 => 15}
conversion_hours = {15 => 14, 17 => 16, 19 => 18}
hostess_id_conversion = {139 => 9, 157 => 17, 153 => 18, 110 => 20, 40 => 19, 141 => 21, 121 => 22, 151 => 23}
status_conversion = {1 => "Inserito", 2 => "Rifiutato", 3 => "Visitato", 4 => "Inserito", 5 => "Ricontattare", 6 => "Vendita"}
mall_id_conversion = {51 => 1, 56 => 2, 53 => 3, 54 => 4, 59 => 5, 65 => 6}
xls = Excel.new("/home/lex/Scrivania/appointments.xls")
xls.default_sheet = xls.sheets.first
city_list = []
# change this to current row numbers
1.upto(3829) do |line|
uid = xls.cell(line,'B').to_i
if user_id_conversion.has_key? uid
id = xls.cell(line, 'A')
uid = user_id_conversion[uid]
name = xls.cell(line, 'F')
surname = xls.cell(line, 'E')
city = xls.cell(line, 'O')
street = xls.cell(line, 'G')
start_at = xls.cell(line, 'C')
start_time = xls.cell(line, 'D')/60/60
street_no = xls.cell(line, 'M')
telephone = xls.cell(line, 'H')
mobile = xls.cell(line, 'I')
email = xls.cell(line, 'J')
notes = xls.cell(line, 'L')
agent_note = xls.cell(line, 'U')
status = xls.cell(line, 'S')
signed_by = xls.cell(line, 'P')
mall = xls.cell(line, 'T')
# we only want to move May -> future
if start_at.month >= Date.today.month
##
# COMPATIBILITY MODE
##
if conversion_hours.has_key? start_time
compatibility = true
else
compatibility = false
end
##
# WHO SIGNED THAT APPOINTMENT?
##
if hostess_id_conversion.has_key? signed_by
signed_by = hostess_id_conversion[signed_by]
elsif user_id_conversion.has_key? signed_by
signed_by = user_id_conversion[signed_by]
else
signed_by = -1 # display "user deleted"
end
##
# APPOINTMENT OR EXCLUDED FIELD?
##
available = true
if status == 4
available = false
end
status = status_conversion[status]
##
# todo SELECT CITY ID FROM DATABASE
##
# city = Municipality.find_by_name(city)
#
##
# CONVERT MALL_ID
##
if mall_id_conversion.has_key? mall
mall = mall_id_conversion[mall]
else
mall = nil
end
##
# EMAIL is REQUIRED
##
no_email = false
if email.blank?
no_email = true
end
##
# CONVERT APPOINTMENT DATES TO NEW ONES
##
if compatibility
old_start_at = DateTime.new start_at.year, start_at.month, start_at.day, start_time
start_at = DateTime.new start_at.year, start_at.month, start_at.day, conversion_hours[start_time]
else
old_start_at = nil
start_at = DateTime.new start_at.year, start_at.month, start_at.day, start_time
end
##
# todo interesting products
# serramenti: boolean, tende_sole: boolean, tecnic: boolean,
# tende_veranda: boolean, porte_interne: boolean, tapparelle: boolean, blindati: boolean,
# zanzariere: boolean,
##
##
# todo INSERT THIS APPOINTMENT
##
=begin
if available == false
Event.new(
:event_calendar_id => User.find(uid).event_calendar,
:status => "Inserito",
:available => false
)
else
Event.new(
:event_calendar_id => User.find(uid).event_calendar,
:signed_by_id => User.find_by_id(signed_by),
:mall_id => Mall.find_by_id(mall),
:status => status,
:name => name,
:surname => surname,
:street => street,
:street_no => street_no,
:city_id => city.name,
:telephone => telephone,
:mobile => mobile,
:email => email,
:no_email => no_email,
:inserting_notes => notes,
:seller_notes => agent_note,
:start_at => start_at,
:available => true,
group_id: 3,
:compatibility_start_at => old_start_at
)
end
=end
end
end
end
Rails環境内でこれを機能させるにはどうすればよいですか? コンソール内で実行されるクラスまたは関数のようなものを作成することを考えていましたrails c
。これは、最新のデータベース バージョンを取得し、更新されたレコードで xls を抽出して魔法を実行するために今晩実行する必要があるためです。
これが初心者の質問のように思えるかもしれませんが、Ruby は初めてです。
PS私はRuby 1.9.3 PPSでRails 3.2.3を使用しています。最初にgemが見つからなかったため、Gemfile内に「roo」を挿入しました。
ありがとう。