【问题标题】:Generate random resource ID's with prefix?生成带有前缀的随机资源 ID?
【发布时间】:2013-04-03 23:23:42
【问题描述】:

我有一个带有以下模型的简单 Rails 3 发票应用程序:

Brand
Client
Invoice

一个品牌有很多发票,客户有很多发票,发票属于客户和品牌。基本上,品牌是创建发票的公司,客户是发票的接收方,发票是实际发票。

我正在尝试找出最好的方法,让每张发票都有一个简单的随机参考编号,并以每个品牌的独特名称作为前缀。

我正在考虑将 invoice_prefix 添加到品牌表中。然后每个品牌都有一个三位数的前缀,例如DAN-

将品牌前缀后跟 5 位随机数添加到发票表中的列的最佳方法是什么?

我愿意接受有关更好的方法的建议!

我希望最终结果是每张发票都有一个类似于DAN-98372 的唯一引用。

我认为最好的方法是将前缀列添加到品牌表中,然后为发票创建一个 before_create 操作,在品牌前缀之后插入一个随机数。我只是不确定最好的方法。

before_create :generate_reference

private
def generate_reference
  self.invoice_number = self.brand.prefix
end

上面的代码正确地提取了品牌前缀,但我不确定之后如何添加一个随机的 5 位数字。

我认为像 <%= rand(1000..9999) %> 这样的东西会起作用,但我不确定如何将它添加到 before_create 中的品牌前缀中。

我对 after_create 方法不是很熟悉,所以任何建议都将不胜感激!

【问题讨论】:

  • 我是这么想的,但后来决定不这样做,因为我不想让客户知道开具发票的数量。如果他们知道业务的繁忙/安静程度,这似乎是个坏主意。

标签: ruby-on-rails-3 random model helper


【解决方案1】:

你可以使用

https://github.com/patdeegan/integer-obfuscator

https://github.com/namick/obfuscate_id

这样您就可以隐藏您实际拥有的发票数量,并且它是独一无二的

【讨论】:

  • github.com/namick/obfuscate_id 看起来不错,但似乎只用于 id 列,并没有提及任何关于前缀的内容。
  • 我现在正在尝试,在创建之前/之后使用时,我似乎无法获得self.id
【解决方案2】:

从提供的信息来看,这是一个多态关联的例子。参考http://guides.rubyonrails.org/association_basics.html

在提供的代码中,您应该调用“generate_reference”“before_create”而不是“after_create”,因为您希望保存分配的值。指定 'after_create' 将进入无限循环。

【讨论】:

  • 我刚刚意识到使用after_create的错误,谢谢!
  • 实际上,你的方法不会保存发票号码,因为你没有指定 self.save 无论如何,你不应该在相同型号的回调后更新 self。
  • 它似乎在保存发票号码,即使没有 self.save。
  • 导致它的'before_create'。它将在创建对象之前执行操作。
  • 使用 before_create 时可以获取 self.id 吗?
【解决方案3】:

生成随机数据资源

https://github.com/wemersonblend/fakejs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多