意外删除了最近的迁移文件

时间:2015-10-14 15:33:02

标签: ruby-on-rails-4 database-migration

我犯了最笨拙的错误。当我在文本编辑器中突出显示迁移文件的名称时,我的手指滑了,我删除了该迁移文件。模式已经具有迁移文件的表模式,但如何还原刚刚删除的文件?我找到了这个SO帖子,但它没有帮助我。

我一直在做一些工作,所以我没有提交,也无法通过版本控制回收丢失的文件。

1 个答案:

答案 0 :(得分:0)

好的,这解决了我的问题。我在终端写了String replace_src = "{String str_obj = this;\n" + "char[] str = this.value;\n" + "String find_obj = $1.toString();\n" + "char[] find = find_obj.value;\n" + "String repl_obj = $2.toString();\n" + "char[] repl = repl_obj.value;\n" + "\n" + "if(str.length == 0 || find.length == 0 || find.length > str.length) {\n" + " return str_obj;\n" + "}\n" + "int start = 0;\n" + "int end = str_obj.indexOf(find_obj, start);\n" + "if(end == -1) {\n" + " return str_obj;\n" + "}\n" + "int inc = repl.length - find.length;\n" + "int inc2 = str.length / find.length / 512;\ninc2 = ((inc2 < 16) ? 16 : inc);\n" + "int sb_len = str.length + ((inc < 0) ? 0 : (inc * inc2));\n" + "StringBuilder sb = (sb_len < 0) ? new StringBuilder(str.length) : new StringBuilder(sb_len);\n" + "while(end != -1) {\n" + " sb.append(str, start, end - start);\n" + " sb.append(repl);\n" + " start = end + find.length;\n" + " end = str_obj.indexOf(find_obj, start);\n" + "}\n" + "if(start != str.length) {\n" + " sb.append(str, start, str.length - start);\n" + "}\n" + "return sb.toString();\n" +"}"; ClassPool cp = new ClassPool(true); CtClass clz = cp.get("java.lang.String"); CtClass charseq = cp.get("java.lang.CharSequence"); clz.getDeclaredMethod("replace", new CtClass[] { charseq, charseq }).setBody(replace_src); instrumentationInstance.redefineClasses(new ClassDefinition(Class.forName(clz.getName(), false, null), clz.toBytecode())); ,其中打印了我删除的文件的名称:20151014152222_create_post_categories.rb

我刚刚使用适当的迁移代码重新创建了此文件。最初我想将表重命名为posts_categories,因此在运行git diff之后,我运行了rake db migrate,将文件和第一个参数重命名为create_table,其中包含:posts_categories。

然后我再次运行迁移。这显然带回了丢失的文件并正确编辑了我的架构。