在rails中,您是否可以在两个模型之间建立关联,其中primary_key和foreign_key具有不同的数据类型?

时间:2011-01-20 21:44:58

标签: ruby-on-rails database activerecord foreign-keys primary-key

以下是犹太教徒吗?

schema.rb
  users
    id:int (autoincr.)
    uid:string <----------------
    ...

  fb_friends
    id:int (autoincr.)
    uid:int <-------------------
    friend_uid:int
    ...

user.rb
   has_many :fb_friends, :primary_key => "uid", :foreign_key => "uid"

请注意,将“user”及其“fb_friends”绑定在一起的键具有不同的数据类型(string和int)。在一个理想的世界里,我可能不会这样做,但鉴于目前的系统架构,这似乎是最有效的解决方案。

但如果没有snafoos,这样做是否可行?

2 个答案:

答案 0 :(得分:2)

这取决于您使用的数据库引擎,例如,对于mysql =&gt;

  

国外的相应栏目   密钥和引用的密钥必须具有   内部类似的内部数据类型   InnoDB使它们可以进行比较   没有类型转换。尺寸   并且整数类型的符号必须是   相同。字符串类型的长度需要   不一样。对于非二元的   (字符)字符串列,   字符集和校对必须   同样的。

更多信息here,无论如何,我不会说比较不同类型的字段是一种很好的做法:(。

希望它可以帮到你!

答案 1 :(得分:1)

不确定它是否有效,但如果您可以选择更改它,我不会推荐它。在Rails迁移中更改列类型非常容易:

change_column :users, :uuid, :integer