对于每张卡片,我想为它们附加一个以 1 递增的特殊数字。
我假设我可以在控制器中完成这一切。
def create
@card = Card.new(params[:card])
@card.SpecNum = @card.SpecNum ++
...
end
或者。我可以公然迟钝。也许最好的选择是向 mysql 添加一个自动增量表。问题是数字必须从特定数字 1020 开始。
有任何想法吗?
对于每张卡片,我想为它们附加一个以 1 递增的特殊数字。
我假设我可以在控制器中完成这一切。
def create
@card = Card.new(params[:card])
@card.SpecNum = @card.SpecNum ++
...
end
或者。我可以公然迟钝。也许最好的选择是向 mysql 添加一个自动增量表。问题是数字必须从特定数字 1020 开始。
有任何想法吗?
您可以使用ALTER TABLE 语句在每个表的基础上设置(和重置)MySQL 的 AUTO_INCREMENT 值:
ALTER TABLE mytable AUTO_INCREMENT = 1020
ALTER TABLE 不是您希望所有用户都拥有的特权,请参阅有关适当保护它的信息。
就个人而言,我不会把这个责任放在数据库或控制器上。我喜欢它的模型。就像是:
/应用程序/模型/卡
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