Strukturieren Sie Ihre Datei seed.rb, um die fortlaufende Erstellung und Aktualisierung von Daten zu ermöglichen. Sie sind nicht darauf beschränkt, eine Seed-Datei nur einmal auszuführen, und wenn Sie glauben, dass sie nur für die erste Bereitstellung verwendet wird, werden Sie die Flexibilität, die sie beim Einstellen von Referenzdaten bieten kann, übersehen.
Eine Seed-Datei Ruby nur so können Sie Dinge wie:
user = User.find_or_initialize_by(email: '[email protected]')
user.name = 'Bob'
user.password = 'secret'
user.role = 'manager'
user.save!
Diese neue Daten erstellen, wenn es nicht oder die Daten aktualisieren existiert, wenn es einige findet.
Wenn Sie Ihre Seed-Datei korrekt strukturieren, können Sie auch abhängige Objekte erstellen und aktualisieren.
Ich empfehle die Verwendung des Bang-Save, um sicherzustellen, dass Ausnahmen ausgelöst werden, falls ein Objekt nicht gespeichert werden kann. Dies ist die einfachste Methode, den Seed zu debuggen.
Ich verwende die seedbank gem, um mehr Struktur zu meinen Seed-Daten, einschließlich der Einstellung von Daten pro Umgebung, abhängige Samen und vieles mehr.
Ich empfehle nicht, Migrationen für Seed-Daten zu verwenden. Es gibt einen Mangel an Flexibilität (wie zielen Sie zum Beispiel auf Seed-Daten auf nur eine Umgebung ab) und keine echte Möglichkeit, einen wiederverwendbaren Satz von Daten aufzubauen, der jederzeit ausgeführt werden kann, um eine bestimmte Umgebung zu aktualisieren. Sie hätten auch eine Reihe von Migrationen, die keinen Bezug zu Ihrem Schema haben, und Sie müssten jedes Mal neue Migrationen erstellen, wenn Sie neue Daten generieren oder aktuelle Daten ändern möchten.
Sie können 'seed.rb' so oft wie Sie möchten ausführen, es ist nur eine normale Ruby-Skript-Datei ... Beachten Sie, dass Sie, wenn Sie es zuvor ausgeführt haben und es erneut ausführen, Duplikate erhalten. In Ihrem Fall, wenn Sie nur eine Reihe von Daten hinzufügen möchten, dann eine 'Rake-Task' oder verwenden Sie einen Skript-Runner http://guides.rubyonrails.org/command_line.html#rails-runner Ich denke nicht, dass Migration geeignet ist das obwohl. – j03w