我意识到我设法生成了一个不正确的模型,并且很难“回滚”这个错误。我正在生成一个模型来包含父表单的问题,编写如下:
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 | |
+-----------------+--------------+------+-----+---------+----------------+
可能是什么原因造成的?我错过了什么吗?非常感谢任何指导。
答案 0 :(得分:2)
这正是你想要的。它创建相同的列,同时添加索引。 add_reference
使用您指定的名称创建列,在您的情况下,该列与原始迁移相同。如果在表上运行SHOW INDEXES
,您应该也会看到新创建的索引。
答案 1 :(得分:0)
references
也会创建相同的外键约束,在您的情况legalform_id
中,使用references
与legalform_id
之间的区别在于使用references
时将自动在模型中添加适当的关系定义,并为字段添加索引