ruby-on-rails - 是否可以在 Rails 2.3.8 迁移中创建带有键的表?

标签 ruby-on-rails

我知道我可以创建一个表,然后在 Rails 2.3.8 迁移中添加一个索引,例如

class CreateFoos < ActiveRecord::Migration
  def self.up
    create_table :foos do |t|
      t.timestamps
      t.string :bar
    end
    add_index :foos, :bar
  end
end

我可以创建一个表并在 CREATE TABLE 子句中指定一个键吗?上面的迁移生成如下 SQL:

CREATE TABLE `foos` (
    `id` int(11) NOT NULL auto_increment,
    `created_at` datetime default NULL,
    `updated_at` datetime default NULL,
    `bar` varchar(255) default NULL,
     PRIMARY KEY  (`id`)
);
ALTER TABLE foos ADD INDEX `index_bar` (`bar`);

但我想要的是:

CREATE TABLE `foos` (
    `id` int(11) NOT NULL auto_increment,
    `created_at` datetime default NULL,
    `updated_at` datetime default NULL,
    `bar` varchar(255) default NULL,
     PRIMARY KEY  (`id`),
     KEY `index_bar` (`bar`)
)

我知道这可以用 #execute 来完成,但是使用 Rails-y block 会好得多。这可以在标准 Rails 2.3.8 中完成吗?使用插件?

最佳答案

您可以在采用原始 SQL 的 Rails 迁移中运行“执行”命令。您的迁移可能看起来像这样:

class CreateFoos < ActiveRecord::Migration
  def self.up
    sql = <<-SQL # This is a "here document"
      CREATE TABLE `foos` (
             `id` int(11) NOT NULL auto_increment,
             `created_at` datetime default NULL,
             `updated_at` datetime default NULL,
             `bar` varchar(255) default NULL,
             PRIMARY KEY  (`id`),
             KEY `index_bar` (`bar`)
      )
    SQL

    execute sql
  end

  def self.down
    drop_table :foos
  end
end

关于ruby-on-rails - 是否可以在 Rails 2.3.8 迁移中创建带有键的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431997/

相关文章:

ruby-on-rails - 如何使用 Rails 检查表列的约束?

ruby-on-rails - 是否可以在本地重现429错误(请求过多)?

javascript - 返回当前位置 x 英里半径内的地点列表

ruby-on-rails - 在 Rspec 中用项目符号标记 N+1 查询

javascript - 由多个外部元素触发的主干 View

ruby-on-rails - Rails是黑匣子吗?

ruby-on-rails - RSpec:如何测试一个方法是否被调用?

ruby-on-rails - rails loggers 调试日志

ruby-on-rails - Rails Active Storage & AWS S3 : How to attach image to model through seeds. rb 然后将其存储在 S3 私有(private)存储桶中?

ruby-on-rails - Rails 在构建关联对象时重用 id?