Ich habe eine Rake-Aufgabe, die einige Anfangsdaten in meiner Rails-App auffüllt. Zum Beispiel Länder, Staaten, Mobilfunkanbieter usw.
Ich habe es jetzt so eingerichtet, dass ich eine Reihe von Erstellungsanweisungen in Dateien in / db / fixtures und eine Rake-Task habe, die sie verarbeitet. Ein Modell, das ich habe, sind beispielsweise Themen. Ich habe eine theme.rb-Datei in / db / fixtures, die so aussieht:
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"
Die Idee hier ist, dass ich einige Standardthemen installieren möchte, mit denen Benutzer beginnen können. Ich habe ein Problem mit dieser Methode.
Das Einstellen der ID funktioniert nicht. Das heißt, wenn ich mich entscheide, ein Thema hinzuzufügen, nennen wir es 'Rot', dann möchte ich einfach die Theme-Anweisung zu dieser Fixture-Datei hinzufügen und die Rake-Task aufrufen, um die Datenbank neu zu säen. Wenn ich das mache, weil alle Themen zu anderen Objekten gehören und sich ihre ID bei dieser Neuinitialisierung ändert, sind alle Links unterbrochen.
Meine Frage ist zuallererst, ist dies ein guter Weg, um mit dem Seeding einer Datenbank umzugehen? In einem früheren Beitrag wurde mir dies empfohlen.
Wenn ja, wie kann ich die IDs hart codieren, und gibt es irgendwelche Nachteile?
Wenn nicht, wie kann die Datenbank am besten gesetzt werden?
Ich werde lange und durchdachte Antworten, die Best Practices beinhalten, wirklich zu schätzen wissen.