mysql - Rails 迁移需要不可移植的 SQL

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

我有一个表,最初定义为一列的默认值。我需要更改或删除默认值。

  • RubyOnRails.org似乎(通过其沉默)表明此更改并未被 ActiveRecord::Migration 包装以实现可移植性。
  • W3schools似乎说所需的 SQL 无法在 MySQL 和 SQLite(我的两个数据库)之间移植。

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

  • 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

最佳答案

谢谢,布拉德·沃斯:;你是对的,这实际上是 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

关于mysql - Rails 迁移需要不可移植的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558967/

相关文章:

mysql - 选择和选择合并

ruby-on-rails - 如何在 RSpec 中 stub 两个链接的 ActiveRecord 方法?

ruby-on-rails - 仅将字符串的第一个字符大写并保留其他字符? ( rails )

sql - 为什么 != 运算符比 = 运算符快?

ios - Xcode : sqlite3_step returning 101, 但不在 block 内执行代码

java - 更新 SQlite 数据库中的图像

php - mysql_affected_rows 不显示消息

mysql - 如何将 MySQL 转换为 SQL Azure? (Wordpress 数据库)

ruby-on-rails - 在heroku上使用回形针上传的视频没有屏幕,只有声音

mysql - 在 MySQL 中选择某些记录后更新