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