2016-10-27 208 views
0

我正在製作一個小型(< 150人)活動的門票,並希望自動增加門票號碼並將這些號碼保存到數據庫中。我是否使用「hidden_​​field」?我的數據庫以ticket.number作爲數組設置,因爲一個人可能會購買多張票。那麼正確的語法是什麼?謝謝!如何在保存到Rails之前設置和增加票號?

+0

需要更多信息。你能提供你正在使用的相關的模型代碼和數據庫關係嗎? – Pyrce

+1

爲什麼你沒有'Ticket'模型並使用它的'id'作爲票號?爲什麼'ticket.number'是一個數組? –

回答

0

是您的數據庫PostgreSQL?支持存儲陣列本身,所以你可以做

"select max(select max(x) from unnest(ticket_array) x) from people" 

我沒有測試過,所以我不看好措辭,但它類似的東西。

但是,您的數據庫足夠小,您可以在Rails中執行此操作,該操作適用於任何類型的數據庫,前提是將陣列作爲序列化字符串存儲。

last_number = Person.all.map{|person| person.ticket_array.max }.max 

你會在before save利用這一點,我假設你有一個整數列number_of_tickets,所以你可以做...

class Person 

    serialize :ticket_array 

    before_save :determine_ticket_numbers 

    def determine_ticket_numbers 
    return if persisted? 
    last_number = self.class.all.map{|person| person.ticket_array.max }.max 
    last_number ||= 0 
    number_of_tickets.times { self.ticket_array << (last_number += 1) } 
    end 
end 
相關問題