从带有额外列的 CSV 文件创建用户
Creating users from a CSV file with extra col
我正在处理的当前项目的一部分将 csv 文件上传到我想用来为 gmaps4rails 创建 Users/points 的 Web 服务器。然而,我的 CSV 文件不仅仅是我需要的 lng lat 和 title 字段作为新用户的参数。
我还能使用 row.to_hash 功能吗?我还尝试了 User.latitude = row.to_hash['lat'] 等只获取我需要的 col
此外,我不知道该把它放在哪里。我尝试了控制器和模型,无论哪种方式,apache 都只给了我 "we are sorry" 页面,并要求我查看日志,但没有提供任何可用于跟踪问题的信息。这使得自我解决问题变得非常困难。
require 'csv'
CSV.foreach('lib/data/cur.csv', :headers => true) do |row|
User.create!(row.to_hash)
end
我的 CSV 示例 - 绘制点不需要 col A-E - 我是否应该将它们作为 col 添加到架构中以便我可以使用 row.to_hash ?
ID,lat,A,lng,B,C,D,E
A8,3023.1214,N,9744.5808,W,0.78,179.75,08102,U
A9,3023.0842,N,9744.6805,W,0.78,179.75,08102,U
AA,3022.9717,N,9744.5025,W,0.78,179.75,08102,U
编辑:这是我的方法在用户模型中的当前迭代
CSV.foreach('lib/data/cur.csv', headers: true) do |row|
user = find_by_id(row['ID']) || new
attributes = {latitude: row['lat'].to_f, longitude: row['lng'].to_f, title: row['ID'].to_hash}
begin
User.create!(attributes)
rescue => e
"User failed to create with #{attributes} attributes because of #{e.message}"
end
end
end
如果您不需要这些值,请不要将它们存储在数据库中。为避免存储所有值,您可以执行以下操作:
CSV.foreach('lib/data/cur.csv', :headers => true) do |row|
User.create!(lat: row['lat'].to_f, lng: row['lng'].to_f)
end
至于把它放在哪里,我会把它放在 seeds.rb 文件或 rake 任务中。如果应用程序需要用户按预期 运行 将它们放入种子中。如果您只是在创建数据,那么我会在 rake 任务中进行。您可能还想添加一些错误处理,因为 whoever/whatever 正在创建您的 CSV 文件并不完美。
所以
CSV.foreach('lib/data/cur.csv', :headers => true) do |row|
attributes = {lat: row['lat'].to_f, lng: row['lng'].to_f}
begin
User.create!(attributes)
rescue => e
"User failed to create with #{attributes} attributes because of #{e.message}"
end
end
我正在处理的当前项目的一部分将 csv 文件上传到我想用来为 gmaps4rails 创建 Users/points 的 Web 服务器。然而,我的 CSV 文件不仅仅是我需要的 lng lat 和 title 字段作为新用户的参数。 我还能使用 row.to_hash 功能吗?我还尝试了 User.latitude = row.to_hash['lat'] 等只获取我需要的 col
此外,我不知道该把它放在哪里。我尝试了控制器和模型,无论哪种方式,apache 都只给了我 "we are sorry" 页面,并要求我查看日志,但没有提供任何可用于跟踪问题的信息。这使得自我解决问题变得非常困难。
require 'csv'
CSV.foreach('lib/data/cur.csv', :headers => true) do |row|
User.create!(row.to_hash)
end
我的 CSV 示例 - 绘制点不需要 col A-E - 我是否应该将它们作为 col 添加到架构中以便我可以使用 row.to_hash ?
ID,lat,A,lng,B,C,D,E
A8,3023.1214,N,9744.5808,W,0.78,179.75,08102,U
A9,3023.0842,N,9744.6805,W,0.78,179.75,08102,U
AA,3022.9717,N,9744.5025,W,0.78,179.75,08102,U
编辑:这是我的方法在用户模型中的当前迭代
CSV.foreach('lib/data/cur.csv', headers: true) do |row|
user = find_by_id(row['ID']) || new
attributes = {latitude: row['lat'].to_f, longitude: row['lng'].to_f, title: row['ID'].to_hash}
begin
User.create!(attributes)
rescue => e
"User failed to create with #{attributes} attributes because of #{e.message}"
end
end
end
如果您不需要这些值,请不要将它们存储在数据库中。为避免存储所有值,您可以执行以下操作:
CSV.foreach('lib/data/cur.csv', :headers => true) do |row|
User.create!(lat: row['lat'].to_f, lng: row['lng'].to_f)
end
至于把它放在哪里,我会把它放在 seeds.rb 文件或 rake 任务中。如果应用程序需要用户按预期 运行 将它们放入种子中。如果您只是在创建数据,那么我会在 rake 任务中进行。您可能还想添加一些错误处理,因为 whoever/whatever 正在创建您的 CSV 文件并不完美。
所以
CSV.foreach('lib/data/cur.csv', :headers => true) do |row|
attributes = {lat: row['lat'].to_f, lng: row['lng'].to_f}
begin
User.create!(attributes)
rescue => e
"User failed to create with #{attributes} attributes because of #{e.message}"
end
end