运行GENERATE命令时Rails add_index缺失

时间:2013-12-26 12:28:28

标签: ruby-on-rails ruby ruby-on-rails-3

由于我是Rails的新手,我在rails网站上关注'getting started' guide

在6.1生成模型,我应该运行rails generate model Comment commenter:string body:text post:references来获得评论模型。

据说,这应该包含在迁移文件中:

class CreateComments < ActiveRecord::Migration
   def change
     create_table :comments do |t|
       t.string :commenter
       t.text :body
       t.references :post

       t.timestamps
     end

     add_index :comments, :post_id
   end
end

但是在我的迁移文件中,除了这一行add_index :comments, :post_id之外,我还有其他所有内容。 相反,我在index:true

之后t.references :post

我似乎无法找到解释,有人可以向我解释这里发生了什么吗?因为稍后我需要使用:post_id,但在我的迁移版本中,它没有明确声明。我很困惑。

2 个答案:

答案 0 :(得分:2)

class CreateComments < ActiveRecord::Migration
  def change
     create_table :comments do |t|
       t.string :commenter
       t.text :body
       t.references :post

       t.timestamps
     end

     add_index :comments, :post_id
  end
end  

class CreateComments < ActiveRecord::Migration
  def change
     create_table :comments do |t|
       t.string :commenter
       t.text :body
       t.references :post, index: true

       t.timestamps
     end

  end
end

将执行相同的操作,它们都会将索引添加到post_id列

您也可以稍后将索引添加到任何要添加到模型的列中的列,如

$ rails generate migration AddPartNumberToProducts part_number:string:index

将生成此代码:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
    add_index :products, :part_number
  end
end

答案 1 :(得分:0)

如果你想为post_id创建索引,请在上面的代码中

然后将其写为t.integer :post_id 否则你可以尝试这个add_index :comments, :post