首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导入CSV时如何覆盖模型中的created_at字段?

导入CSV时如何覆盖模型中的created_at字段?
EN

Stack Overflow用户
提问于 2012-05-20 06:29:05
回答 3查看 7.6K关注 0票数 5

我正在将一个充满等待注册的CSV导入到我的数据库中,我如何在保留初始日期的同时导入它们,而不是让它们都显示相同的导入日期?

我得到了错误:Rails can't mass-assign protected attributes for id, created_at

代码:

代码语言:javascript
运行
复制
 csv_file = params[:csv][:file].read
    csv = CSV.parse(csv_file, :headers => false) 
    csv.each do |row|
       Model.create!(:email => row[0], :created_at => row[1])    
    end    
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-20 08:26:47

您需要将所需的列添加到attr_accessible

代码语言:javascript
运行
复制
class Tutorial < ActiveRecord::Base
  attr_accessible :created_at
end
票数 6
EN

Stack Overflow用户

发布于 2016-01-04 11:31:35

在Rails 4中:

attr_accessible不再被使用,将它包含在模型的顶部可能会破坏您的代码。只需在传递给create!的参数中包含:created_at就可以了。

将@Ghoti的评论转换为此处的答案,以使其更具可见性

票数 15
EN

Stack Overflow用户

发布于 2019-02-15 10:32:01

也许你可以这样做:

代码语言:javascript
运行
复制
csv.each do |row|
   doc = Model.create!(:email => row[0])
   doc.update(created_at: row[1])
end

我需要做一些类似的事情,在组织中返回,并根据最早注册的用户(如果适用)更新创建。(组织ID为自定义字符串:-)

所以您可以看到update命令是如何工作的……您可以看到的巧妙技巧使用BSON id来获取日期。

代码语言:javascript
运行
复制
Org.all.to_a.collect do |o|
  u = o.users.first
  if u
    o.update(created_at: Time.parse(u.id.generation_time.strftime('%Y-%m-%d %H:%M')))
  else
    o.update(created_at: Time.now.utc)
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10669288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档