2011-09-22 61 views
1

我有一個多租戶Rails應用程序來創建支持票據。票據應該有增量票號。我無法使用ID列,因爲由於該應用程序將被不同的帳戶使用,所以他們會發現奇數票號。Rails應用程序不同賬戶的增量門票號碼

例如,如果帳戶1創建了兩張票,他們得到門票#1和#門票2。帳戶2創建一張票,他得到票#3。 (這很奇怪,因爲他應該獲得第一張門票,因爲這是他在他的帳戶下創建的第一張門票)。

所以,我應該在ticket表中添加一個ticket_number列。現在,你會如何自動增加數字並與其他賬戶分開?

回答

3
class Ticket 
    after_create :increment_tickets 

    def increment_ticket 
    Account.increment_counter(:ticket_number, self.account_id) 
    end 
end 
+0

的增量,我明白,但破壞可能不起作用後遞減。如果你有門票1,2,3,並摧毀#2,那麼,這將是困難的。 – mliebelt

+0

yeap,我沒有想過的東西 – fl00r

2

的解決方案應該是你的客戶表(你必須有一個,用於爲多租戶)應該由以下遷移擴展:

class AddCounter < ActiveRecord:Migration 
    def self.up 
    add_column :accounts, :ticket_counter, :integer 
    add_column :tickets, :ticket_number, :integer 
    end 
end 

每一次,你創建一個客戶的門票,你必須增加門票號碼。查看@ fl00r的帖子。票證的創建應該這樣(代碼從我的控制器):

class TicketController 
    def create 
    #Here comes your addition: 
    params[:ticket][:ticket_number]= Account.find(session[:account_id]).ticket_counter 
    # Here comes the rest 
    @article = Ticket.new(params[:ticket]) 
    ... 
    end 
end 

這裏的背景是:

  • 你要知道這是當前賬戶(見session[:account_id],如果你有其他商店的當前帳戶,使用它)。
  • 使用params[:ticket]散列中的ticket_counter創建票證。
  • 創建後,帳戶中的計數器會增加(請參閱@ fl00r的答案)。
+0

那麼我會從tickets_controller中獲得這個值,然後增加它並使用它創建新的票據。如果故障單創建成功,則將增加後的值複製到ticket_counter。像那樣的東西? – leonel

+0

將我的解決方案與來自@ fl00r的解決方案結合起來,這應該對你有用。你只需要實現'Account.increment_counter'方法,其餘的都是通過rails完成的。 – mliebelt

+0

好吧,它會在帳戶表中增加,但是如何將該值存入數字(表示票號)列中的票據表中?因爲它在創建之後已經創建了票據。我需要再次打電話給機票並運行更新嗎? – leonel