我在调查模型中设置的关联如下
attr_accessible :name, :questions_attributes
has_many :questions
和问题模型
attr_accessible :content, :survey_id, :answers_attributes
belongs_to :survey
我有一个将question_id添加到调查表的迁移 但我开始意识到这种迁移不是必需的 我已经在模型中定义了它们的关联。 我的理解是否正确?
如果我的理解是正确的,我想反转这种迁移。
我添加了以remove
开头的最后两行并运行rake db:migrate
但它没有做任何事情。
def change
add_column :surveys, :question_id, :integer
add_index :surveys, :question_id
remove_column :surveys, :question_id, :integer
remove_index :surveys, :question_id
end
答案 0 :(得分:2)
根据我的理解,您希望回滚迁移。如果是这样,那么您可以使用以下语法
rake db:rollback STEP=n
or
rake db:migrate:down VERSION=<version_number_of_migration>
回滚特定的迁移
答案 1 :(得分:2)
def up
add_column :surveys, :question_id, :integer
add_index :surveys, :question_id
end
def down
remove_index :surveys, :question_id
remove_column :surveys, :question_id
end
up方法在rake db:migrate
上执行,down方法在rake db:rollback
上执行
您不能仅依赖change
方法,因为需要完成回滚的顺序(首先删除索引,然后删除列)
编辑: 实际上,你只需在Rails 3.2 +
中使用change
即可
def change
add_column :surveys, :question_id, :integer
add_index :surveys, :question_id
end
答案 2 :(得分:0)
是的,总是需要编写一个迁移来在调查表中添加question_id
仅声明关联是不够的
您的迁移应该是这样的
改变了 add_reference:survey,:question,index:true 端如果您的系统中只有更改,则可以随时回滚迁移。在这些迁移在不同环境中运行后,请勿尝试回滚
回滚rake db:migrate:rollback VERSION =“迁移文件的时间戳”