カードごとに、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