【问题标题】:Rails migration requiring non-portable SQL需要非可移植 SQL 的 Rails 迁移
【发布时间】:2014-08-28 22:24:48
【问题描述】:

我有一个表,它最初是用一列的默认值定义的。我需要更改或删除默认设置。

  • RubyOnRails.org 似乎(通过它的沉默)说 ActiveRecord::Migration 没有为便携性包装此更改。
  • W3schools 似乎说所需的 SQL 不能在 MySQL 和 SQLite(我的两个 DB)之间移植。

如果我误读了其中任何一个,那么理顺我就足够了。否则:

  • 如何在ActiveRecord::Migration#up 例程中编写对底层数据库敏感的execute 调用?例如,我可以查看来自config/database.yml 的活动值吗?

当前表定义(来自db/schema.rb)是:

  create_table "apis", force: true do |t|
    t.string   "provider"
    t.string   "endpoint"
    t.string   "name"
    t.integer  "owner_id"
    t.string   "status"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "apiary_dev_domain"
    t.string   "resource_root",     default: "/v1", null: false
    t.text     "description"
  end

【问题讨论】:

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


【解决方案1】:

谢谢,布拉德·沃思:;你是对的,这实际上是 Adding default => true to boolean in existing Rails column 的欺骗。

ActiveRecord::Migration#change_column 成功了。具体来说,我的迁移脚本是:

class DeslashifyUrlComponentsInApi < ActiveRecord::Migration
  def up
    change_column :apis, :resource_root, :string, default: "v1", null: false
  end
  def down
    change_column :apis, :resource_root, :string, default: "/v1", null: false
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 2012-05-11
    • 2020-02-14
    • 2016-05-15
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多