对于每张卡片,我想为它们附加一个特殊数字,以1为增量。
我假设我可以在控制器中完成所有操作。
def create
@card = Card.new(params[:card])
@card.SpecNum = @card.SpecNum ++
...
end
或者。我可以公然迟钝。也许最好的办法是为mysql添加一个自动增量表。问题是数字必须从特定的数字开始,1020。
有什么想法吗?
答案 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