Ho un rake task che popola alcuni dati iniziali nella mia app per rails. Ad esempio, paesi, stati, operatori di telefonia mobile, ecc.Qual è il modo migliore per seminare un database in Rails?
Il modo in cui l'ho impostato ora è che ho un sacco di istruzioni create nei file in/db/fixtures e un'attività rake che li elabora. Ad esempio, un modello che ho è temi. Ho un file theme.rb in/db/infissi che assomiglia a questo:
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"
L'idea qui è che voglio installare alcuni temi stock per gli utenti di iniziare con. Ho un problema con questo metodo.
L'impostazione dell'ID non funziona. Ciò significa che se decido di aggiungere un tema, chiamiamolo 'Red', quindi vorrei semplicemente aggiungere l'istruzione theme a questo file fixture e chiamare l'attività rake per resettare il database. Se lo faccio, perché i temi appartengono ad altri oggetti e il loro cambiamento di id su questa reinizializzazione, tutti i link sono interrotti.
La mia domanda è prima di tutto, è un buon modo per gestire il seeding di un database? In un post precedente, mi è stato consigliato.
Se è così, come posso codificare gli ID e ci sono degli svantaggi?
In caso contrario, qual è il modo migliore per eseguire il seeding del database?
Apprezzerò molto le risposte lunghe e ponderate che incorporano le migliori pratiche.
Potresti accettare la risposta più aggiornata? –
Proprio fatto. Grazie per il promemoria – Tony