我知道我可以创建一个表,然后在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中完成吗?使用插件?
答案 0 :(得分:1)
您可以在采用原始SQL的Rails迁移中运行'execute'命令。您的迁移可能如下所示:
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
答案 1 :(得分:-2)
试试这个
create_table :foos do |t|
t.timestamps
t.index :bar
end