【问题标题】:In Rails how would one generate a unique serial number for a new instance of a model?在 Rails 中,如何为模型的新实例生成唯一的序列号?
【发布时间】:2011-07-30 23:25:02
【问题描述】:

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

有什么想法吗?

感谢收看!

【问题讨论】:

  • 我不建议这样做的一个原因是,您最终可能会运行多个 Rails 应用程序并在所有应用程序和多个物理盒子中保持一个唯一的数字将非常困难。可能有一种方法可以通过数据库完成您想要的。您能否进一步说明序列号格式和限制?
  • 感谢您的回复。序列号将是格式为 PLN-xxxxxx 的字符串。我正在考虑从“PLN-100000”开始并从那里递增。
  • 那么所有记录的序列号前面都会有PLN-?
  • 正确,只是区分不同型号的前缀。
  • 为什么不直接使用 id 并在显示时在代码中添加 PLN- 前缀?为什么要避免使用数据库?

标签: ruby-on-rails auto-increment ruby-on-rails-3


【解决方案1】:

我建议改为在模型中构建串行模型。这将使您以后可以更灵活地调整序列号格式,并且它将在数据库中保留唯一的自动增量。使用常规的自增整数主键,然后像这样创建序列号:

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

因此,例如,如果您有一个 id = 567 的产品,您将有一个这样的序列号:

Product.find(567).serial_number
=> PLN-000567

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多