Ruby on rails 可以在Rails 2.3.8迁移中创建一个带有键的表吗?

Ruby on rails 可以在Rails 2.3.8迁移中创建一个带有键的表吗?,ruby-on-rails,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 `foos` ( `id

我知道我可以创建一个表,然后在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 `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块会更好。这可以在标准Rails 2.3.8中完成吗?使用插件?

试试这个

create_table :foos do |t|
  t.timestamps
  t.index :bar
end

您可以在Rails迁移中运行“execute”命令,该迁移采用原始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`);
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
class CreateFoossql=No,我得到了#``的
未定义方法
索引。这在什么版本的Rails上工作?我现在被困在2.3.8上了(在评论中有一个列类型列表API链接非常有用。但是,它必须适用于比我正在运行的版本更新的Rails版本。不,它也是大约2.3.8版本,但是评论者犯了一个错误,RailsD'oh!似乎没有
索引
列类型!有任何插件可以填补这个空白吗?这看起来很容易我应该说明我试图避免
#execute
——我会编辑这个问题。当然,
#execute
正是我所使用的,但在Rails中,为了这么琐碎的事情不得不回到原始SQL,这感觉太错误了(