我不小心从我的一个模型中删除了所有记录。
Model.destroy_all
对于输出,我收到了所有已销毁记录的大列表。
=> [#<Model id: 1, some_attribute: "Hello World">, #<Model id: 2, some_attribute: " Hello World 2">, etc etc etc]
但是,我有一个文本。我可以做任何事情,使用 IRB 来返回记录吗?
这是非常非常紧急的!任何帮助表示赞赏。
太感谢了
我不小心从我的一个模型中删除了所有记录。
Model.destroy_all
对于输出,我收到了所有已销毁记录的大列表。
=> [#<Model id: 1, some_attribute: "Hello World">, #<Model id: 2, some_attribute: " Hello World 2">, etc etc etc]
但是,我有一个文本。我可以做任何事情,使用 IRB 来返回记录吗?
这是非常非常紧急的!任何帮助表示赞赏。
太感谢了
这是我对模型进行的快速测试:
1.
pry(main)> output = JobUser.first(10).to_s
=> "[#<JobUser id: 10001, instagram_user_id: 297705889, job_id: 2, invited: true, created_at: \"2013-09-23 21:53:37\", updated_at: \"2013-09-23 21:53:37\">, #<JobUser id: 10002, instagram_user_id: 36823356, job_id: 2, invited: true, created_at: \"2013-09-23 21:53:37\", updated_at: \"2013-09-23 21:53:37\">, #<JobUser id: 10003, instagram_user_id: 509682835, job_id: 2, invited: true, created_at: \"2013-09-23 21:53:37\", updated_at: \"2013-09-23 21:53:37\"> ....
2.
parsed = output.gsub('#<', '').gsub('>', '').gsub(/^\[/, '').gsub(/\]$/, '').split('JobUser').map(&:strip)
=>
"id: 10001, instagram_user_id: 297705889, job_id: 2, invited: true, created_at: \"2013-09-23 21:53:37\", updated_at: \"2013-09-23 21:53:37\",",
"id: 10002, instagram_user_id: 36823356, job_id: 2, invited: true, created_at: \"2013-09-23 21:53:37\", updated_at: \"2013-09-23 21:53:37\",",
"id: 10003, instagram_user_id: 509682835, job_id: 2, invited: true, created_at: \"2013-09-23 21:53:37\", updated_at: \"2013-09-23 21:53:37\"...
3.
parsed.shift
因为数组中的第一个元素将是一个空白字符串
4.
records = parsed.map { |serialized_record| JobUser.new(eval "{ #{serialized_record} }") }
那么你可能应该运行类似的东西records.each { |record| record.save }
请注意,您应该替换JobUser
为您的型号名称。关键是您必须解析字符串并将其插入数据库
祝你好运!
以下脚本应该可以解决问题:
require 'bigdecimal'
str = "#<Model id: 1, some_attribute: #<BigDecimal:4ba0730,'0.0',9(18)>, another_attribute: \"Hello World\">, #<Model id: 2, some_attribute: \" Hello World 2\">"
str.scan(/#?<(\w+) (.+?)>(?=, #|$)/) do |m|
model = Object.const_get(m[0])
m[1].gsub!(/#<BigDecimal:.+?('.+?').+?>/, "BigDecimal.new(\\1)")
eval("model.create(#{m[1]})")
end
这也处理 BigDecimal 的实例。如果您需要处理其他特殊类型,您可以添加另一个调用gsub!
.