Ruby on rails 在迁移文件中,为什么在;“向下”;零件的顺序必须与“相反”;向上;?
使用Rails 5.0。在Rails指南和我的教程中都提到了Ruby on rails 在迁移文件中,为什么在;“向下”;零件的顺序必须与“相反”;向上;?,ruby-on-rails,ruby-on-rails-5,rails-migrations,Ruby On Rails,Ruby On Rails 5,Rails Migrations,使用Rails 5.0。在Rails指南和我的教程中都提到了down中的方法应该与up的顺序相反。 例如: class AlterUsers < ActiveRecord::Migration[5.0] def up rename_table("users", "admin_users") add_column("admin_users", "username", :string, :limit =>25, :after => "email") ch
down
中的方法应该与up
的顺序相反。
例如:
class AlterUsers < ActiveRecord::Migration[5.0]
def up
rename_table("users", "admin_users")
add_column("admin_users", "username", :string, :limit =>25, :after => "email")
change_column("admin_users", "email", :string, :limit => 100)
end
def down
change_column("admin_users", "email", :string, :default => '', :null => false)
remove_column("admin_users", "username")
rename_table("admin_users", "users")
end
end
class-AlterUsers25、:之后=>“电子邮件”)
更改列(“管理员用户”、“电子邮件”、:字符串、:限制=>100)
结束
降下
更改列(“管理员用户”、“电子邮件”、“字符串”、“默认值=>”、:空=>false)
删除列(“管理员用户”、“用户名”)
重命名表格(“管理员用户”、“用户”)
结束
结束
注意:down
中的方法与在up
中执行的顺序相反。i、 e:由于change\u列
是从向上
执行的最后一列,因此是在向下
执行的第一列
我知道
down
必须撤消up
所做的一切,以便将数据库恢复到以前的状态。我只是想知道为什么down
中的方法必须按照与up
相反的顺序执行,是否有什么特别的原因?应该是这里要重点关注的词,因为它并不总是需要的,但养成这样做的习惯是一种很好的做法。在实践中,只有当过程包含彼此有一定关联的迁移时,才有必要这样做
要给出执行顺序无关紧要的迁移示例,请执行以下操作:
class AlterUsers < ActiveRecord::Migration[5.0]
def up
add_column "users", "first_name", :string
add_column "users", "last_name", :string
end
def down
remove_column "users", "first_name"
remove_column "users", "last_name"
end
end
class-AlterUsers
在上面的示例中,这两个更改根本不会相互影响,即使我没有颠倒顺序,也不会导致任何问题
但是看一下问题中的示例,重命名稍后添加列的表与更改非常相关。因此,如果您不想颠倒down
方法中的顺序,那么它将首先将表从的“admin\u users”
重命名回的“users”
,然后尝试从的“admin\u users”
表中删除一个不再存在的列,这将导致迁移失败。当然,通过调整对remove\u列的调用,将其从“users”
表中删除,可以很容易地解决这个问题,但是一旦您转到那里,迁移就会变得非常混乱
TL;博士:
它并不总是需要的,但如果您总是这样做,您就不太可能因为迁移冲突而遇到问题。Wow感谢您这么有意义,我们将从现在开始这样做:)