0

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

我假设我可以在控制器中完成这一切。

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

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

有任何想法吗?

4

2 回答 2

2

您可以使用ALTER TABLE 语句在每个表的基础上设置(和重置)MySQL 的 AUTO_INCREMENT 值:

ALTER TABLE mytable AUTO_INCREMENT = 1020

ALTER TABLE 不是您希望所有用户都拥有的特权,请参阅有关适当保护它的信息。

于 2010-06-14T17:34:34.573 回答
1

就个人而言,我不会把这个责任放在数据库或控制器上。我喜欢它的模型。就像是:

/应用程序/模型/卡

validates_uniqueness_of :special_number

def before_validation_on_create
  self.special_number = CardSpecialNumber.next!
end

/app/models/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
于 2010-06-14T18:17:37.653 回答