我可以通过CSV导入人员详细信息作为条目。
如果电子表格中没有该行的ID,则会创建该条目,否则会根据ID号更新条目。
最终,我想做的是拥有“创造过程”。如果没有id,则在导入条目时更新字段,否则,请不要管它(每个条目只需要设置一次' CreatedAt'设置一次)。
如果已经有'CreatedAt'设置,我们只是更新,它不需要做什么。
这是我到目前为止的代码:
控制器文件:
def import
Votsphonebook.import(params[:file])
redirect_to root_url, notice: "Entries updated!"
end
模型文件:
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
votsphonebook_hash = row.to_hash
votsphonebook = Votsphonebook.where(id: votsphonebook_hash["id"])
if votsphonebook.count == 1
votsphonebook.first.update_attributes(votsphonebook_hash)
else
Votsphonebook.create!(votsphonebook_hash)
end
end
end
我只需要在代码中有一个入口点,我可以在其中查看当前行并运行if语句。
谢谢
答案 0 :(得分:1)
updated_at
和created_at
列由Active Record自动填充。没有必要的额外步骤来实现您的目标。
如果要捕获自定义列的当前时间,可以执行以下操作:
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
votsphonebook_hash = row.to_hash
votsphonebook = Votsphonebook.find(votsphonebook_hash["id"])
if votsphonebook
votsphonebook.update_attributes(votsphonebook_hash.merge(your_custom_column: Time.now))
else
Votsphonebook.create!(votsphonebook_hash)
end
end
end
请注意,为了清晰起见,我稍微重构了你的取景器。