我有一个创建支持服务单的多租户Rails应用程序。门票应该有递增的门票号码。我不能使用ID列,因为该应用程序将由不同的帐户使用,他们会找到奇怪的票号。
例如,如果帐户1创建了两张故障单,则会获得故障单#1和故障单#2。帐户2创建一张票,他获得票号#3。 (这很奇怪,因为他应该得到1号票,因为这是他在他的账户下创建的第一张票。)
所以,我应该在ticket表中添加一个ticket_number列。现在,您将如何自动增加数字并与其他帐户分开?
答案 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]
创建故障单。