Rails App不同帐户的增量票号

时间:2011-09-22 14:50:14

标签: ruby-on-rails ruby multi-tenant

我有一个创建支持服务单的多租户Rails应用程序。门票应该有递增的门票号码。我不能使用ID列,因为该应用程序将由不同的帐户使用,他们会找到奇怪的票号。

例如,如果帐户1创建了两张故障单,则会获得故障单#1和故障单#2。帐户2创建一张票,他获得票号#3。 (这很奇怪,因为他应该得到1号票,因为这是他在他的账户下创建的第一张票。)

所以,我应该在ticket表中添加一个ticket_number列。现在,您将如何自动增加数字并与其他帐户分开?

2 个答案:

答案 0 :(得分:3)

class Ticket
  after_create :increment_tickets

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

答案 1 :(得分:2)

解决方案应该是您的客户表(您必须拥有一个,以便成为多租户)应通过以下迁移进行扩展:

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

每次为客户创建一张票,您都必须增加票号。查看@ fl00r的帖子。 Ticket的创建应该是这样的(来自我的控制器的代码):

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],如果您有当前帐户的其他商店,请使用该帐户。)
  • 使用ticket_counter哈希中的params[:ticket]创建故障单。
  • 创建后,帐户中的计数器会递增(请参阅@ fl00r的答案)。