我有一个包含字段的表:
我需要导入一个仅包含四个字段的CSV:dept_no
,amount
,acct_no
,ccode
。
我正在使用CSV.foreach循环导入。当用户在单击导入按钮之前选择要导入的文件时,他们将选择s_dt
和fs_dt
的日期。
在浏览循环时,需要将这些选定日期添加到s_dt
字段和fs_dt
字段。
此外,我还有第二个表格,其中只包含2个字段location_cd
和ccode
。在我的循环中,我需要遍历每一行并将Table1中的location_cd
更新为与Table2 location_cd
相同,其中Table2中的ccode
与Table1中的ccode
匹配。
在Table1中,我有belongs_to:Table2,在table2中我有has_many:Table1。
class Financial < ActiveRecord::Base
belongs_to :financial_loc_ccode
require 'csv'
def self.import(file)
CSV.foreach(file.path, headers: true, row_sep: :auto, col_sep: "\t") do |row|
financial_hash = row.to_hash
location = FinancialLocCcode.where(ccode: financial_hash["ccode"])
financial_hash[:location_cd] = location
Financial.create!(financial_hash)
end
end
end
这是我的模型,我收到此错误消息
ERROR: value too long for type character varying(4) : INSERT INTO "financials" ("acct_no", "amount", "dept_no", "ccode", "location_cd") VALUES ($1, $2, $3, $4, $5) RETURNING "id" (see image)
此外,我还没有丝毫知道从哪里开始更新s_dt
,fs_date
。
我是铁轨的初学者,而且是我的头脑。任何帮助将非常感激。如果需要更多信息,请告诉我,我可以提供更多信息。
答案 0 :(得分:0)
您看到的错误似乎告诉您,您尝试插入数据库的值太大/超出了列的限制。
根据您从错误中看到的内容,您尝试设置的列上的数据类型为character varying(4)。这意味着您可以插入该列的字符串长度为4个字符。
调试时要尝试的几件事情:
1。查看您的数据库架构并确定哪些列具有这些约束 - 这将为您提供跳跃点。你会说,“好吧,现在我知道哪一根柱子正在塞进 - 我想把它放在那里?”
2。在Rails console中逐行运行代码。检查INSERT语句并仔细检查你想要填充到borking列中的东西,确实是你想要放在那里的东西。如果是,请考虑是否需要更改列的约束。如果不是,那就不要把它放在那里!
3. 调试时不要害怕puts
语句。在循环的每一步,puts financial_hash
。然后在你的控制台中运行循环 - 你的哈希是你认为的吗?
我知道除了“尝试多调试一下”之外,我没有给你一些具体的建议,但希望这是一个很好的起点。祝你好运!