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 に答える