在rails 3中生成随机主ID

时间:2011-12-15 14:58:03

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我的rails应用程序中有不同的模型,如客户,用户,管理员等。我想将主要id作为字符串,并在前面添加一个字符。所以对于客户来说,id就像C1,C2,C3。对于用户,它将是U1,U2,U3等。

3 个答案:

答案 0 :(得分:2)

如果您真的需要这些信息,您可以定义一个名为string_id的方法,或者返回前缀为您定义的自定义前缀的数字id的方法吗?

非数字主键的比较(在数据库中查找记录时)只会减慢您的应用程序速度,我不确定您为什么要这样做,因为您只需执行{{1}调用你选择的模型来获取类名,或者类的第一个字符,或者其他什么。我认为你需要在你的问题中证明并解释这方面的技术需求,否则它只是一个非常糟糕的主意。

此外,您的问题标题指定“随机” - 但随机部分在哪里?你究竟要做的是什么?

基本上有多种更好的方法可以做到这一点,而不是尝试使用String作为主键,至少基于你在问题中提供的信息到目前为止。

答案 1 :(得分:2)

除非你有这样做的非常非常好的理由,否则不要这样做。生成自己的密钥似乎是一个好主意,直​​到它导致故障。

相反,请创建一个具有唯一索引的辅助键,并将其用于此目的。

答案 2 :(得分:0)

您可以声明替代ID列,也可以定义自己的密钥。

例如:

class Customer < ActiveRecord::Base
  self.primary_key = "C_"+ #your column 
end

请参阅http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/PrimaryKey/ClassMethods.html#method-i-primary_key-3D