2010-04-16 74 views
4

我创建一个Rails 3应用程序,将分散,我需要使用UUID主键我的表,这将是最好的宝石,作业的插件。我还想知道是否有可能在ActiveRecord中使用多态关系而不使用polymorphicable_type列,因为我使用的是UUID。使用UUID作为在轨和多晶型关系的主键

我创建了一个演示http://github.com/boriscy/uuidrails3使用UUID作为主键,你应该检查模块UUIDHelper内的lib /以及所有的迁移。不需要在数据库中添加主键,只需要一个索引,因为主键验证字段的唯一性,但我们不需要使用UUID。

+0

好吧,那么选择哪个表包含UUID 12345记录的标准是什么? – 2010-04-16 19:04:12

+0

当您使用UUID作为键时,默认情况下您会使用多态关系,请尝试一些JOINS,您将看到您可以与任何表进行连接。 – 2010-04-18 03:50:39

+0

我从您提供的链接中检出了您的应用。问题:如果你使用uuids作为你的主要使用者,你如何处理发送给你的发现者的畸形uuids? – rip747 2010-07-09 13:32:06

回答

6

this file lib目录中,并添加为一个初始化:

class ActiveRecord::Base 
    set_primary_key :uuid 

    before_create :set_uuid 

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

至于关系,弗拉德是正确的ActiveRecord的需要知道的记录是表中找到它。如果你想要这种功能,可以尝试其他的东西,比如MongoMapper。

+0

我想我可以使用id而不是uuid,反正它是一样的。这将更加方便。 – 2010-04-17 23:17:59

+0

是的,但在这种情况下,请确保将迁移中的id列更改为字符串(或更宽的整数字段)。 – mckeed 2010-04-18 17:39:04