Rya*_*yan 15 mysql migration optimization ruby-on-rails-3
我正在编写一个迁移脚本来创建一个表,其中包含一个名为的主键列,guid并且是一个VARCHAR(25).问题是我觉得我必须加倍努力才能一步到位才能实现目标.
如果我跑:
create_table(:global_feeds, :primary_key => 'guid') do |t|
t.string :guid, :limit => 25
t.text :title
t.text :subtitle
...
t.timestamps
end
Run Code Online (Sandbox Code Playgroud)
我得到一个表,其中一个名为guidno column 的主键被调用id(这就是我想要的).但是,问题是guid列是INT(11)打开自动增量的.所以我必须运行一个额外的命令:
change_column :global_feeds, :guid, :string, :limit => 25
Run Code Online (Sandbox Code Playgroud)
似乎有点费解,基本上必须运行两个SQL命令才能获得我认为应该可以在一个中执行的操作.
关于如何优化这个的任何建议?
kak*_*oni 25
在Rails 4中你可以做到;
create_table :global_feeds, id: false do |t|
t.string :guid, primary_key: true
...
end
Run Code Online (Sandbox Code Playgroud)
Max*_*akh 20
我想你正在使用mySQL,所以这是你可以尝试的
create_table :global_feeds, {:id => false} do |t|
t.string :guid
t.text :title
t.text :subtitle
t.timestamps
end
execute "ALTER TABLE global_feeds ADD PRIMARY KEY (guid);"
Run Code Online (Sandbox Code Playgroud)
如果您不在mySQL上,则应更改execute命令中的查询以使用您的数据库引擎.我不确定你是否可以在SQLite上做到这一点.并且不要忘记将此行放在global_feed.rb模型中的某处:
set_primary_key :guid
Run Code Online (Sandbox Code Playgroud)
无论如何,当你坚持其惯例时,你将充分利用Rails.更改主键名称和类型可能不是一个好主意.
| 归档时间: |
|
| 查看次数: |
25927 次 |
| 最近记录: |