Quelle est la meilleure façon de créer une firebase database dans Rails?

J’ai une tâche de rake qui remplit certaines données initiales dans mon application rails. Par exemple, pays, états, opérateurs de téléphonie mobile, etc.

La façon dont je l’ai configuré maintenant, c’est que j’ai un tas d’instructions de création dans les fichiers de / db / fixtures et une tâche de rake qui les traite. Par exemple, un modèle que j’ai est des thèmes. J’ai un fichier theme.rb dans / db / fixtures qui ressemble à ceci:

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’idée ici est que je souhaite installer des thèmes de base pour les utilisateurs. J’ai un problème avec cette méthode.

La définition de l’ID ne fonctionne pas. Cela signifie que si je décide d’append un thème, appelons-le ‘Red’, alors je voudrais simplement append l’instruction de thème à ce fichier de fixture et appeler la tâche de rake pour redimensionner la firebase database. Si je le fais, parce que les thèmes appartiennent à d’autres objects et que leur identifiant change lors de cette réinitialisation, tous les liens sont rompus.

Ma question est tout d’abord, est-ce un bon moyen de gérer l’ensemencement d’une firebase database? Dans un article précédent, cela m’a été recommandé.

Si oui, comment puis-je coder les identifiants, et y a-t-il des inconvénients?

Si non, quel est le meilleur moyen d’ensemencer la firebase database?

J’apprécierai vraiment les réponses longues et réfléchies qui incorporent les meilleures pratiques.

Mise à jour puisque ces réponses sont légèrement dépassées (bien que certaines s’appliquent toujours).

Fonction simple ajoutée dans les rails 2.3.4, db / seeds.rb

Fournit une nouvelle tâche

 rake db:seed 

Bon pour peupler des enregistrements statiques communs comme des états, des pays, etc.

http://railscasts.com/episodes/179-seed-data

* Notez que vous pouvez utiliser des fixtures si vous les avez déjà créées pour remplir également la tâche db: seed en plaçant ce qui suit dans votre fichier seeds.rb (de l’épisode de railcast):

 require 'active_record/fixtures' Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "operating_systems") 

Pour Rails 3.x, utilisez ‘ActiveRecord :: Fixtures’ au lieu de ‘Fixtures’ constant

 require 'active_record/fixtures' ActiveRecord::Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "fixtures_file_name") 

Habituellement, il existe deux types de données sur les semences.

  • Données de base sur lesquelles repose le cœur de votre application. Je l’appelle les graines communes.
  • Les données environnementales , par exemple pour développer l’application, il est utile d’avoir un tas de données dans un état connu que nous pouvons utiliser pour travailler sur l’application localement (la réponse Factory Girl ci-dessus couvre ce type de données).

Dans mon expérience, je rencontrais toujours le besoin de ces deux types de données. J’ai donc rassemblé un petit bijou qui étend les graines de Rails et vous permet d’append plusieurs fichiers de semences communs sous db / seeds / et toutes les données de semences environnementales sous db / seeds / ENV, par exemple db / seeds / development.

J’ai trouvé que cette approche était suffisante pour donner une structure à mes données de départ et me donner le pouvoir de configurer mon environnement de développement ou de développement dans un état connu, simplement en exécutant:

 rake db:setup 

Les luminaires sont fragiles et flocons à entretenir, tout comme les décharges SQL.

factory_bot semble faire ce que vous essayez de réaliser. Vous pouvez définir tous les atsortingbuts communs dans la définition par défaut, puis les remplacer au moment de la création. Vous pouvez également transmettre un identifiant à l’usine:

 Factory.define :theme do |t| t.background_color '0x000000' t.title_text_color '0x000000', t.component_theme_color '0x000000' t.carrier_select_color '0x000000' t.label_text_color '0x000000', t.join_upper_gradient '0x000000' t.join_lower_gradient '0x000000' t.join_text_color '0x000000', t.cancel_link_color '0x000000' t.border_color '0x000000' t.carrier_text_color '0x000000' t.public true end Factory(:theme, :id => 1, :name => "Lite", :background_color => '0xC7FFD5') Factory(:theme, :id => 2, :name => "Metallic", :background_color => '0xC7FFD5') Factory(:theme, :id => 3, :name => "Blues", :background_color => '0x0060EC') 

Lorsqu’il est utilisé avec faker, il peut remplir une firebase database très rapidement avec des associations sans avoir à se soucier des Fixtures (beurk).

J’ai un code comme celui-ci dans une tâche de râteau.

 100.times do Factory(:company, :address => Factory(:address), :employees => [Factory(:employee)]) end 

Utiliser les fichiers seeds.rb ou FactoryBot est génial, mais ils sont respectivement parfaits pour les structures de données fixes et les tests.

Le joyau de la seedbank pourrait vous donner plus de contrôle et de modularité pour vos graines. Il insère des tâches de rake et vous pouvez également définir des dépendances entre vos semences. Votre liste de tâches rake aura ces ajouts (par exemple):

 rake db:seed # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/ENVIRONMENT/*.seeds.rb. ENVIRONMENT is the current environment in Rails.env. rake db:seed:bar # Load the seed data from db/seeds/bar.seeds.rb rake db:seed:common # Load the seed data from db/seeds.rb and db/seeds/*.seeds.rb. rake db:seed:development # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/development/*.seeds.rb. rake db:seed:development:users # Load the seed data from db/seeds/development/users.seeds.rb rake db:seed:foo # Load the seed data from db/seeds/foo.seeds.rb rake db:seed:original # Load the seed data from db/seeds.rb 

Au lieu d’utiliser des créations explicites, utilisez des fichiers YAML. Avec une syntaxe simple, vous pouvez renseigner toutes les valeurs d’un object. En fait, si vous connaissez quelque chose sur les tests de rails, c’est la méthode standard pour amorcer la firebase database de test. Consultez ces pages:
http://railspikes.com/2008/2/1/loading-seed-data http://quotedprintable.com/2007/11/16/seed-data-in-rails

Rails a une méthode intégrée pour générer des données comme expliqué ici .

Une autre solution consisterait à utiliser un bijou pour un semis plus avancé ou plus facile, par exemple: banque de semences .

Le principal avantage de ce joyau et la raison pour laquelle je l’utilise est qu’il possède des fonctionnalités avancées telles que des dépendances de chargement de données et des données de départ pour chaque environnement.

L’ajout d’une réponse à jour comme cette réponse était d’abord sur google.

Ajoutez-le dans les migrations de firebase database, de cette façon, tout le monde l’obtient lors de la mise à jour. Manipulez toute votre logique dans le code ruby ​​/ rails, vous n’avez donc jamais à vous soucier des parameters d’identification explicites.

Le meilleur moyen est d’utiliser des appareils.

Remarque: gardez à l’esprit que les appareils effectuent des insertions directes et n’utilisent pas votre modèle. Par conséquent, si vous avez des rappels qui remplissent des données, vous devrez trouver une solution de contournement.