Написание простого приращения счетчика в рельсах - PullRequest
0 голосов
/ 14 июня 2010

Для каждой карты я хотел бы прикрепить к ней специальный номер, который увеличивается на единицу.

Я предполагаю, что могу сделать все это в контроллере.

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

Или.Я могу быть нагло отсталым.И, возможно, лучше всего добавить таблицу с автоинкрементом в mysql.Проблема в том, что число должно начинаться с определенного номера, 1020.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 14 июня 2010

Вы можете установить (и сбросить) значение MySQL AUTO_INCREMENT для каждой таблицы, используя оператор ALTER TABLE :

ALTER TABLE mytable AUTO_INCREMENT = 1020

ALTER TABLE - это не привилегия, которую вы хотите, чтобы все пользователи имели, смотрите о том, как правильно ее защитить.

1 голос
/ 14 июня 2010

Лично я бы не стал возлагать эту ответственность на базу данных или контроллер; Мне нравится это в модели. Что-то вроде:

/ приложение / модели / карта

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...