使用前缀生成随机资源ID?

时间:2013-04-03 23:23:43

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

我有一个简单的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方法不是很熟悉所以任何建议都会受到赞赏!

3 个答案:

答案 0 :(得分:1)

从提供的信息中,它是一个多态关联的案例。参考http://guides.rubyonrails.org/association_basics.html

在提供的代码中,你应该调用'generate_reference''before_create'而不是'after_create',因为你想要保存指定的值。指定'after_create'将无限循环。

答案 1 :(得分:1)

你可以使用

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

https://github.com/namick/obfuscate_id

通过这种方式,您可以隐藏您真正拥有的发票数量,这将是唯一的

答案 2 :(得分:0)

生成随机数据资源

https://github.com/wemersonblend/fakejs