ActiveModel::UnknownAttributeError: WorkOrder 的未知属性“”
Posted
技术标签:
【中文标题】ActiveModel::UnknownAttributeError: WorkOrder 的未知属性“”【英文标题】:ActiveModel::UnknownAttributeError: unknown attribute '' for WorkOrder 【发布时间】:2021-11-13 06:06:59 【问题描述】:我有一个 rake 任务,它应该导入我通过将 3 个 CSV 文件与 Pandas 和 Python 合并创建的 CSV 文件(我是 Ruby 和 Rails 的新手,所以这就是我使用 Pandas 的原因) .
这是我使用 rails generate task import import_csv
创建的 rake 任务,当我运行 rake -T
时可以看到它。
namespace :import do
desc "Import finalCsv.csv into database"
task import_csv: :environment do
require 'csv'
filename = "#Rails.root/db/finalCsv.csv"
CSV.foreach(filename, headers: true) do |row|
WorkOrder.create!(row.to_hash)
end
end
end
这是我将 3 个原始 CSV 合并在一起的 python 脚本。
import pandas as pd
locations = pd.read_csv("locations.csv")
technicians = pd.read_csv("technicians.csv")
workOrders = pd.read_csv("work_orders.csv")
workOrders = workOrders.merge(technicians, how="inner", left_on="technician_id", right_on="id")
workOrders = workOrders.merge(locations, how="right", left_on="location_id", right_on="id")
workOrders = workOrders.rename(columns="name_x": "Full Name", "name_y": "Company")
workOrders = workOrders.drop(labels = ["id_x", "id_y", "id"], axis=1)
finalCsv = workOrders.to_csv("finalCsv.csv", encoding="utf-8")
print(finalCsv)
这里还有我的迁移和架构文件。
迁移:
def change
create_table :work_orders do |t|
t.integer :technician_id
t.integer :location_id
t.time :time
t.integer :duration
t.integer :price
t.string :FullName
t.string :Company
t.string :City
t.timestamps
end
end
end
架构:
create_table "work_orders", force: :cascade do |t|
t.integer "technician_id"
t.integer "location_id"
t.time "time"
t.integer "duration"
t.integer "price"
t.string "FullName"
t.string "Company"
t.string "City"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
end
最后,当我在 Rails 控制台中运行 WorkOrder.all
(我的模型)或 WorkOrder.new
时,两者都是有效的,所以我对这里出了什么问题感到有些困惑。有什么想法吗?
【问题讨论】:
【参考方案1】:错误告诉您您正在尝试添加属性""
。例如,WorkOrder.new("" => "foo")
应该会产生相同的错误。
WorkOrder.create!(row.to_hash)
检查row
,其中一个键是空白的。您的 CSV 列之一可能缺少标题。
【讨论】:
【参考方案2】:您的 CSV 可能包含没有标题的额外单元格。如果你 100% 肯定数据是正确的,你可以跳过额外的数据:
WorkOrder.create!(row.to_hash.except(''))
在您的 rake 任务的相应部分中。
【讨论】:
【参考方案3】:感谢大家。我最终修改了我的 Python 脚本,以便在将 Pandas 数据帧写入 CSV 时没有 id 列。然后我又遇到了一些无法预料的问题......我最终重新生成了我的模型并重新开始。
【讨论】:
以上是关于ActiveModel::UnknownAttributeError: WorkOrder 的未知属性“”的主要内容,如果未能解决你的问题,请参考以下文章