ruby-on-rails - Rails 迁移 : Check Existence and Keep Going?

标签 ruby-on-rails migration

我在迁移中做了这样的事情:

add_column :statuses, :hold_reason, :string rescue puts "column already added"

但事实证明,虽然这适用于 SQLite,但不适用于 PostgreSQL。看起来,如果 add_column 崩溃,即使捕获了异常,事务也已终止,因此迁移无法执行任何额外工作。

是否有任何非数据库特定方法来检查列或表是否已存在?如果做不到这一点,有什么办法让我的救援 block 真正发挥作用吗?

最佳答案

从 Rails 3.0 及更高版本开始,您可以使用 column_exists?检查列是否存在。

unless column_exists? :statuses, :hold_reason
  add_column :statuses, :hold_reason, :string
end

还有一个table_exists?函数,其历史可以追溯到 Rails 2.1。

关于ruby-on-rails - Rails 迁移 : Check Existence and Keep Going?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645230/

相关文章:

c++ - 使用 C++ 编译器编译 C 代码会出现什么问题?

ruby-on-rails - 是否可以读取文件而不将其保存在 Rails 中?

ruby-on-rails - Windows 下的 Rails 3 readline 问题

hibernate - 是否可以从 Hibernate 注释类生成 hbm xmls?

jsf - PrimeFaces 3.3.1 p :dialog doesn't shows up. 错误:widgetVar 未定义

php - yii2重命名迁移文件以重新排序迁移错误

ruby-on-rails - 事件管理员多选过滤器

ruby-on-rails - 删除用户连同他的帖子

ruby-on-rails - 如何根据条件更新属性?

sql - 添加外键约束锁定表