可能であれば、スプレッドシートを CSV として保存してください。Excel スプレッドシートを解析するよりも、CSV ファイルを解析する方がはるかに優れた gem があります。この種の問題を処理する効果的な方法は、CSV ファイルを読み取り、必要に応じてすべてのレコードを作成する rake タスクを作成することです。
たとえば、古いがまだ効果的なFasterCSV gemを使用して、ファイルからすべての行を読み取る方法を次に示します。
data = FasterCSV.read('lib/tasks/data.csv')
columns = data.remove(0)
unique_column_index = -1#The index of a column that's always unique per row in the spreadsheet
data.each do | row |
r = Record.find_or_initialize_by_unique_column(row[unique_column_index])
columns.each_with_index do | index, column_name |
r[column_name] = row[index]
end
r.save! rescue => e Rails.logger.error("Failed to save #{r.inspect}")
end
ただし、元のスプレッドシートに一意の列があることに依存しています。
それを rake タスクに入れると、それを Capistrano デプロイ スクリプトに接続できるので、デプロイするたびに実行されます。find_or_initialize は、重複したレコードを取得しないようにする必要があります。