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