我的一个迁移文件消失到蓝天♂️我想要手动重写它。
这就是我在schema.rb中为该表所用的内容
+ create_table "collections", force: :cascade do |t|
+ t.string "title"
+ t.string "description"
+ t.bigint "designer_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["designer_id"], name: "index_collections_on_designer_id"
+ end
我的自定义迁移应该如下所示吗?
def change
create_table :collections do |t|
t.string :title
t.string :description
t.integer :designer_id
t.timestamps
end
end
我应该对 add_index 做什么吗?
谢谢!
已编辑的解决方案IDEA
我将添加到现有的迁移文件,而不是创建新文件。所以下面的代码应该可以完成这项工作,对吗?
class AddSlugToCollections < ActiveRecord::Migration[5.1]
def change
create_table :collections do |t|
t.string :title
t.string :description
t.integer :designer_id
t.timestamps
end
add_index :collections, :designer_id
add_column :collections, :slug, :string
add_index :collections, :slug
end
end
答案 0 :(得分:2)
是的,如果您想再次保留相同的更改,那么您也应该添加索引。
将迁移更改为,
def change
create_table :collections do |t|
t.string :title
t.string :description
t.integer :designer_id
t.timestamps
end
add_index :collections, :designer_id
end
答案 1 :(得分:2)
@ganesh Navale是正确的。我想在此补充一点。如果已运行迁移,则使用旧迁移时间戳重命名新迁移时间戳。您可以从import java.util.*;
public class ListsPractice {
public static void main(String[] args) {
Scanner userin = new Scanner(System.in);
System.out.println("Enter length of desired list: ");
int lenlist = userin.nextInt();
ArrayList list1 = new ArrayList();
for(int counter = 0; counter <= lenlist; counter++) {
System.out.println("Enter an element: ");
String value=userin.nextLine();
list1.add(value);
}
System.out.println("the result is: "+list1.subList(1, lenlist+1));
}
}
命令获取旧的迁移时间戳。