2012-01-13 73 views
4

我有项目和问题。问题编号(不是ID)必须是自动递增的,但是使用project_id作用域。任何宝石或简单的方法来实现这一目标?谢谢!导轨:自动增量列与范围

编辑:acts_as_list将完成这项工作,但如果记录被删除呢?下一期将与它的号码。

回答

2
在您的问题类

belongs_to :project 
before_validation(:on => :create) do 
    self.issue_number = self.project.issues.collect { | issue | issue.issue_number }.max + 1 
end 

(或左右) - 本质上,在创建新对象之前,发现有问题的项目相关的问题,最大的问题数量,增加的是,和使用它为新的问题编号...

+2

我想我需要在项目表中有数字字段,并只是为了增加,因为否则如果有东西被删除,下一个将会有它的数量。但是,这种方法很整齐。谢谢。 – 7elephant 2012-01-13 07:17:09

+0

仅仅为记录设置“destroyed_on”(而不是实际删除它)并将“实时”范围应用于针对该类的大多数查询并不罕见。如果您这样做,那么您可以在查询中包含已删除的记录,以确定下一个问题编号。 – elijah 2012-01-13 07:20:35

+1

请注意,如果一次创建多个模型,这可能会受到竞争条件的限制。 – Kris 2016-09-12 15:23:55

0

您可以在项目问题关联上使用counter_cache并覆盖项目的decrement_counter什么也不做。