#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)
будет.