У мене є завдання rake, яке заповнює деякі вихідні дані у моєму додатку rails. Наприклад, країни, штати, оператори мобільного зв'язку тощо.
Як я зараз це налаштовую, я маю купу операторів створення у файлах у / db / fixtures і завдання rake, яке їх обробляє. Наприклад, одна моя модель - це теми. У мене є файл theme.rb у / db / fixtures, який виглядає так:
Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
:component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
:cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
:component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
:join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
:cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
:component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
:cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"
Ідея тут полягає в тому, що я хочу встановити деякі теми для акцій, з яких користувачі починають. У мене проблема з цим методом.
Встановлення ідентифікатора не працює. Це означає, що якщо я вирішу додати тему, назвемо її "червоною", тоді я просто хотів би додати заяву теми до цього файлу приладу і викликати завдання rake для повторного завантаження бази даних. Якщо я це зроблю, оскільки теми належать іншим об’єктам та їх ідентифікатор змінюється при цій повторній ініціалізації, усі посилання порушуються.
Моє питання насамперед, чи це хороший спосіб впоратись із засіванням бази даних? У попередньому дописі це мені рекомендували.
Якщо так, то як я можу жорстко кодувати ідентифікатори, і чи є у цього мінуси?
Якщо ні, то який найкращий спосіб залучити базу даних?
Я по-справжньому оціню довгі та продумані відповіді, що включають найкращі практики.