2017-03-08 126 views
-1

我已阅读了很多文章,讨论如何使用BIGINT作为Rails中的主键,但似乎所有这些都已过时。Rails:如何使用BIGINT作为主键

如何将BIGINT用于我的主键,最好是通过全局设置。 (我知道在性能上的差异)

事情我已经尝试:

+0

有没有尝试过任何的那些所谓过时的方法吗? –

+0

[我应该关闭它作为重复?](http://stackoverflow.com/questions/28708868/rails-4-mysql-bigint-primary-key-issues-and-errors) –

+0

我试过所有我发现 – jonhue

回答

1

如果您的应用程序是本地建于rails '>= 5.1',你的主键应该已经BIGINT。通过“本机构建”,我的意思是,您的迁移最初是在Rails版本上运行的(相对于在< 5.1中运行它们,之后再更新gem)

如果它们不是BIGINT,则可以使用迁移操作在下面的源发现,粘贴在这里为了方便:

change_column :your_table_name, :id, :bigint

来源:http://www.mccartie.com/2016/12/05/rails-5.1.html

+0

我之前看过那篇文章,但明确地讲到Rails> 5.1。正如我在文章中所述,我使用的是Rails 5.0.2。据我所知,Rails 5.1尚未在rubygems上发布...... – jonhue

+0

哎呀!对不起,我误读了。 这就是说,你是否尝试过迁移? – armahillo

+0

我试过了,但没有奏效。 – jonhue

0

你有没有尝试这段代码在迁移文件中?

def change 
    create_table :table_name, id: false do |t| 
     t.bigint :id, null: false 
     t.index :id, name: "pk_table_name", unique: true 
    end 
    end 

,并在型号:

class ModelName < ApplicationRecord 
    self.primary_key = :id 
end 
+1

什么是“”pk_table_name“”?据我所知,'t.integer:id,limit:8'是Rails中BIGINT的正确表达式,还是Rails 5.1的东西? – jonhue

+0

是的,你是对的:'t.integer:ID,限制:5,空:假的,选择:“主KEY'' 和''pk_table_name是索引名。 –