在rails中编写一个简单的递增计数器

时间:2010-06-14 17:27:57

标签: mysql ruby-on-rails auto-increment increment

对于每张卡片,我想为它们附加一个特殊数字,以1为增量。

我假设我可以在控制器中完成所有操作。

def create
 @card = Card.new(params[:card])
 @card.SpecNum = @card.SpecNum ++
...
end

或者。我可以公然迟钝。也许最好的办法是为mysql添加一个自动增量表。问题是数字必须从特定的数字开始,1020。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用ALTER TABLE statement基于每个表设置(并重置)MySQL的AUTO_INCREMENT值:

ALTER TABLE mytable AUTO_INCREMENT = 1020

ALTER TABLE不是您希望所有用户拥有的权限,请参阅正确保护它。

答案 1 :(得分:1)

就个人而言,我不会把这个责任放在数据库或控制器上;我喜欢它在模型中。类似的东西:

<强> /应用/模型/卡

validates_uniqueness_of :special_number

def before_validation_on_create
  self.special_number = CardSpecialNumber.next!
end

<强> /应用/模型/ card_special_number

def self.next!
  last_number_holder = CardSpecialNumber.first
  if last_number_holder.nil?
    CardSpecialNumber.create!(:counter => 1020)
    return 1020
  end

  last_number_holder.counter = last_number_holder.counter + 1
  last_number_holder.save!
  last_number_holder.counter
end