2011-04-06 39 views
3

在Rails中,我正在寻找一种方法来为模型的新实例生成内部记录的自动递增序列号。我想避免创建特定于数据库的代码,而是要有一个无论数据库如何都能工作的解决方案。我目前的想法是等待模型保存,然后获取已保存模型的ID并将其作为序列号的后缀,但是在创建时我必须保存每个记录两次。在Rails中,如何为模型的新实例生成唯一的序列号?

任何想法?

感谢您的期待!

+0

我推荐这样做的一个原因是,您最终可能会运行多个rails应用程序,并且在所有应用程序中保持一个唯一的号码,并且多个物理盒子将非常困难。可能有一种方法可以通过数据库完成你想要的任务。您能否更详细地了解序列号格式和约束条件? – 2011-04-06 16:23:41

+0

感谢您的回复。序列号将是格式为PLN-xxxxxx的字符串。我正考虑从“PLN-100000”开始并从那里增加。 – jklina 2011-04-06 16:42:51

+0

那么所有记录都会有PLN-他们的序列号? – 2011-04-06 16:52:24

回答

11

我会建议在模型中构建串行模型。这会让您更灵活地稍后调整序列号格式,而不会在数据库中保留唯一的自动增量。使用常规的自动递增的整数主键,然后创建这样的序列号:

class Product 
    def serial_number 
    "PLN-%.6d" % id 
    end 
end 

所以,如果你有ID的产品= 567例如,你有这样的序列号:

Product.find(567).serial_number 
=> PLN-000567 
相关问题