Можно ли создать таблицу с ключами при переходе на Rails 2.3.8? - PullRequest
3 голосов
/ 25 марта 2011

Я знаю, что могу создать таблицу, а затем добавить индекс в миграцию 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. Можно ли это сделать в стандартном Rails 2.3.8? Используете плагин?

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Вы можете запустить команду execute в миграции Rails, которая принимает сырой SQL.Ваша миграция может выглядеть примерно так:

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
0 голосов
/ 25 марта 2011

попробуйте

create_table :foos do |t|
  t.timestamps
  t.index :bar
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...