使用Rails 5

时间:2018-03-08 13:52:25

标签: ruby-on-rails database postgresql migration ruby-on-rails-5

我的一个迁移文件消失到蓝天♂️我想要手动重写它。

这就是我在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

2 个答案:

答案 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)); } } 命令获取旧的迁移时间戳。