我犯了一个错误,意外删除了生产中附件模型中的所有记录。
我至少可以从控制台输出中获取所有记录(我以前做过一个简单的Attachment.all并获取屏幕上显示的所有记录)。
这是实际输出的样本:
=> [#<Attachment id: 50, shortcut: "1eo2", attachment_file_name: "tumblr_lbxifqK2LT1qa0qyy.jpg", attachment_content_type: "image/jpeg", attachment_file_size: 80960, attachment_updated_at: "2010-12-22 07:39:01", created_at: "2010-12-22 07:39:02", updated_at: "2011-03-07 02:14:05", post_id: nil, about_me: nil, is_nsfw: nil, attachable_id: nil, attachable_type: nil, is_default: nil, temp_token: nil, user_id: 1, description: nil, visits: nil>,
#<Attachment id: 51, shortcut: "1fp7", attachment_file_name: "tumblr_lbxig3Qzrg1qa0qyy.jpg", attachment_content_type: "image/jpeg", attachment_file_size: 75532, attachment_updated_at: "2010-12-22 08:04:00", created_at: "2010-12-22 08:04:01", updated_at: "2011-03-07 02:14:05", post_id: nil, about_me: nil, is_nsfw: nil, attachable_id: nil, attachable_type: nil, is_default: nil, temp_token: nil, user_id: 1, description: nil, visits: nil>,
#<Attachment id: 52, shortcut: "1ghq", attachment_file_name: "tumblr_lbh5dvOZMf1qa4bk9o1_500.jpg", attachment_content_type: "image/jpeg", attachment_file_size: 68396, attachment_updated_at: "2010-12-22 08:04:32", created_at: "2010-12-22 08:04:33", updated_at: "2011-03-07 02:14:05", post_id: nil, about_me: nil, is_nsfw: nil, attachable_id: nil, attachable_type: nil, is_default: nil, temp_token: nil, user_id: 1, description: nil, visits: nil>,
问题是我如何解析这个日志再次把它们放到数据库中,还有一种方法可以保留原始ID并避免使用新的ID? (我通过ID与其他模特获得了其他关系)。
答案 0 :(得分:0)
您可能能够做到的快速而肮脏的方式与此类似:
1)将所有控制台输入加载到字符串中。取下开头/结尾的方括号(方形的)。然后,使用此Regex获取每个Attachment对象的内容:
#<Attachment (.*)>,
所以,像
consolestr.scan(/#<(Attachment .*)>,/).each do |attachment|
它应该为您提供一个由每个Attachment对象组成的数组。
2)在逗号上拆分每个Attachment对象的属性以获取完整属性,然后在冒号上获取键值对。类似的东西:
properties = {}
attachment.split(",").each do |property|
s = property.split(":")
key = s[0]
value = s[1]
properties[key] = value
end
3)重新创建记录:
Attachment.create(properties)
不幸的是,我现在不在一个可以完全测试它的地方,但我认为它应该在理论上起作用。您可能需要对捕获的value
进行一些额外的修改,例如删除字符串值的引号。希望这至少有一种方法可以让您开始恢复该数据。我相信你现在非常神经紧张!
答案 1 :(得分:0)
如果您正在尝试将数据库恢复到确定它之前的确切位置,那么最好的选择是获取控制台输出并将其转换为原始SQL INSERT语句。
通过Rails控制台创建对象将重新分配ID字段,这将破坏您已有的任何现有对象关联。