首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用活动记录时,是否可以将ID更改为字符串?

问当我使用活动记录时,是否可以将ID更改为字符串?
EN

Stack Overflow用户
提问于 2015-11-14 05:30:59
回答 2查看 1.2K关注 0票数 1

看起来默认的:id是整数,我能把它变成一个字符串吗?

EN

回答 2

Stack Overflow用户

发布于 2015-11-14 05:41:31

是的你可以。

首先运行迁移:

代码语言:javascript
复制
create_table 'table' id: false, force: true do |t|
  t.string 'id', null: false
end

指定id的类型string。

然后在你的模型中:

代码语言:javascript
复制
class Table < ActiveRecord::Base
  self.primary_key = :id
end

这基本上将显式地指示字符串id是对象实例的主键。

票数 4
EN

Stack Overflow用户

发布于 2015-11-14 17:43:01

您还应该考虑查找uuid在Rails中的内容。

尽管它主要是PostgreSQL的一部分功能,但我们发现它在MYSQL上也工作得很好:

​

​

你可以这样设置它:

代码语言:javascript
复制
#app/models/post.rb
class Post < ActiveRecord::Base
   before_create :set_uuid

   private

   def set_uuid
      self.uuid = loop do
        random_token = SecureRandom.hex(5)
        break random_token unless self.class.exists? random_token
      end
   end
end

正如Cyzanfar所指出的,可以通过将id主键替换为uuid来实现这一点。Rails 4自动支持 uuid...

代码语言:javascript
复制
def change
   create_column :posts, :uuid, :string
   remove_column :posts, :id
   rename_column :posts, :uuid, :id
   execute "ALTER TABLE table ADD PRIMARY KEY (uuid);"
end

一些参考资料:

--

因为Rails4开箱即支持uuid,所以这对您来说应该是有效的。

如前所述,我们在一些模型中使用了uuid (它允许我们在保持记录唯一性的同时维护功能)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33702103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档