编辑rails迁移表不会影响生成的表

时间:2014-11-20 17:52:01

标签: mysql ruby-on-rails ruby ruby-on-rails-4

我意识到我设法生成了一个不正确的模型,并且很难“回滚”这个错误。我正在生成一个模型来包含父表单的问题,编写如下:

class CreateQuestions < ActiveRecord::Migration
  def change
create_table :questions do |t|
  t.integer  :legalform_id
  t.integer :question_number
  t.string :type
  t.text :the_question

  t.timestamps
end
  end
end

然后运行rake db:migrate以生成相关表格。

属性legalform_id包含与问题关联的父表单的ID。 ...然后我了解了rails和关联,意识到我试图做的事情已经融入了框架。所以我更改了legalform_id行,以便迁移表如下所示:

class CreateQuestions < ActiveRecord::Migration
  def change
create_table :questions do |t|
  t.references :legalform
  t.integer :question_number
  t.string :type
  t.text :the_question

  t.timestamps
end
  end
end

我输入了命令rake db:rollback,它删除了问题表,然后运行rake db:migrate,假设我对迁移表所做的更改会相应地生成mysql表。令我惊讶的是,新表包含与原始迁移表中指定的属性相同的属性,如下所示:

mysql> show columns in questions;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| legalform_id    | int(11)      | YES  |     | NULL    |                |
| question_number | int(11)      | YES  |     | NULL    |                |
| type            | varchar(255) | YES  |     | NULL    |                |
| the_question    | text         | YES  |     | NULL    |                |
| created_at      | datetime     | YES  |     | NULL    |                |
| updated_at      | datetime     | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

可能是什么原因造成的?我错过了什么吗?非常感谢任何指导。

2 个答案:

答案 0 :(得分:2)

这正是你想要的。它创建相同的列,同时添加索引。 add_reference使用您指定的名称创建列,在您的情况下,该列与原始迁移相同。如果在表上运行SHOW INDEXES,您应该也会看到新创建的索引。

答案 1 :(得分:0)

references也会创建相同的外键约束,在您的情况legalform_id中,使用referenceslegalform_id之间的区别在于使用references时将自动在模型中添加适当的关系定义,并为字段添加索引