在Rails中使用UUID作为主键和多态关系

6
我正在创建一个Rails 3应用程序,它将是分散的,我需要使用UUID作为表的主键,什么是最好的gem或插件?我还想知道是否可以在ActiveRecord中进行多态关系而不使用polymorphicable_type列,假设我正在使用UUID。
我创建了一个演示http://github.com/boriscy/uuidrails3,它使用UUID作为键。你应该检查lib/中的UUIDHelper模块以及所有迁移。不需要在数据库中添加主键,只需添加索引,因为主键验证字段的唯一性,但我们不需要UUID这样做。

1
好的,那么选择哪个表包含 UUID 12345 的记录的标准是什么呢? - Vlad Zloteanu
当您使用UUID作为键时,默认情况下会执行多态关系,请尝试一些联接操作,您会发现可以与任何表进行联接。 - Boris Barroso
我从您提供的链接中查看了您的应用程序。问题是:如果您正在使用uuid作为主键,那么当传递给您的查找器的uuid格式不正确时,您会如何处理? - rip747
@Boris,感谢提供的示例应用程序。我进行了改编和扩展,以创建COMB GUID,并征求意见,是否这是一个好主意:如果我使用GUID作为主键,在Rails 3.1中使用COMB GUID是否是个好主意? - Mark Berry
我发现了这篇文章,非常好 http://blog.arkency.com/2014/10/how-to-start-using-uuid-in-activerecord-with-postgresql/ ,适用于使用postgreSQL,而它目前是我的默认数据库。 - Boris Barroso
1个回答

7
此文件放入lib目录,并将其添加为初始化程序:
class ActiveRecord::Base
  set_primary_key :uuid

  before_create :set_uuid

  def set_uuid
    self.uuid = UUID.generate(:compact)
  end
end

关于关系,Vlad是正确的,ActiveRecord需要知道一条记录在哪个表中才能找到它。如果你需要这种功能,请尝试使用类似MongoMapper的其他工具。


我认为可以使用id而不是uuid,反正两者都一样。这样更方便。 - Boris Barroso
是的,但在这种情况下,请确保将迁移中的id列更改为字符串(或更宽的整数字段)。 - mckeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接