2013-04-03 50 views
0

我有一個簡單的Rails 3發票應用程序有如下型號:生成帶前綴的隨機資源ID?

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

我認爲,但後來決定反對,因爲我不想讓客戶知道發票的數量。如果他們知道業務是多麼繁忙/安靜,似乎是一個壞主意。 – dannymcc 2013-04-03 23:47:25

回答

1

可以使用

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

https://github.com/namick/obfuscate_id

這樣你可以隱藏你真的有多少發票有,這將是獨一無二的

+0

https://github.com/namick/obfuscate_id看起來不錯,但似乎只有id列,並沒有提及任何關於前綴。 – dannymcc 2013-04-04 12:02:38

+0

可以在創建之前/之前完成 – 2013-04-04 12:03:49

+0

我現在正在嘗試,當創建之前/之後使用時,我似乎無法獲得'self.id'。 – dannymcc 2013-04-04 12:16:50

1

從提供的信息,它是一個多態關聯的情況。請參閱http://guides.rubyonrails.org/association_basics.html

在提供的代碼中,由於您希望保存指定的值,所以應該調用'generate_reference'before_create'而不是'after_create'。指定'after_create'將進入無限循環。

+0

我剛剛意識到使用after_create時的錯誤,謝謝! – dannymcc 2013-04-04 11:58:09

+0

其實,你的方法不會保存發票號碼,因爲你還沒有指定自我。保存無論如何,你不應該在相同模型的回調之後更新自己。 – 2013-04-04 12:03:47

+0

即使沒有self.save,它似乎也在保存發票號碼。 – dannymcc 2013-04-04 12:05:35