Rails destroy_all撤消

时间:2013-09-27 10:33:37

标签: ruby ruby-on-rails-3 irb undo destroy

我不小心从我的模特中删除了所有记录。

Model.destroy_all

对于输出,我收到了所有已销毁记录的大清单。

=> [#<Model id: 1, some_attribute: "Hello World">, #<Model id: 2, some_attribute: " Hello World 2">, etc etc etc] 

但是,我有一个文字。 我可以使用IRB做任何事情来返回记录吗?

这非常非常紧急!任何帮助表示赞赏。

非常感谢

2 个答案:

答案 0 :(得分:2)

这是我对模型进行的快速测试:

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)

=&GT;

     "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替换为您的型号名称。 关键是你必须解析字符串并将其插回数据库

祝你好运!

答案 1 :(得分:2)

以下脚本可以解决这个问题:

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!