Автоматически сгенерированный столбец Rails MySQL

#mysql #ruby-on-rails-3 #migration

#mysql #ruby-on-rails-3 #миграция

Вопрос:

Я работаю над RoR 3.x с MySQL в качестве серверной части.

Есть ли какой-либо способ изменить существующий идентификатор (автоматически созданный при миграции) таким образом, чтобы можно было генерировать определенный пользователем шаблон.

Например: «Таблица продуктов» должна иметь значения в поле «id«, такие как «P01», «P02» и так далее, где P может быть указано пользователем, а 01,02 генерируются автоматически.

Заранее спасибо!

Комментарии:

1. Рассматривали ли вы возможность создания дополнительного одного или двух столбцов для символа / количества, а затем обновить их самостоятельно и оставить идентификатор в покое? Или есть другое требование, которое предотвращает это?

Ответ №1:

«Обычные» идентификаторы (1, 2, 3, …, n) в этом случае генерируются не rails, а MySQL (с использованием AUTO_INCREMENT ). Итак, если вы хотите использовать автоматически генерируемые, автоматически увеличивающиеся идентификаторы, я бы посоветовал не возиться с этим. Что вы могли бы сделать, и что я бы предложил, это создать дополнительный столбец, а затем заполнить его с помощью обратного вызова в вашей модели.

Пример:

 class Product < ActiveRecord::Base
  attr_accessor :user_supplied_prefix

  after_create :generate_user_supplied_id

  private
  def generate_user_supplied_id
    update_attribute(:user_supplied_id, "#{self.user_supplied_prefix}#{self.id}")
  end
end
  

Недостатком такого подхода является то, что Product.find(user_supplied_id) это не сработает. К счастью, Product.find_by_user_supplied_id(user_supplied_id) будет.