Aggiunta di dati di esempio al database mediante rake per un motore rails
-
06-07-2019 - |
Domanda
Sto provando i motori di Rails creando un motore di annunci in cui gli utenti possono visualizzare / pubblicare / rispondere agli annunci.
L'applicazione principale contiene codice per l'autenticazione dell'utente e profili mentre esiste un motore che ho creato che gestirà la funzionalità degli annunci.
Ora voglio aggiungere alcuni dati di esempio al database per il motore di annunci. Così ho creato un file rake chiamato 'sample_classifieds_data.rake' in 'vendor / plugins / classifieds / lib / task' e ho aggiunto i file yml in 'vendor / plugins / classifieds / lib / task / sample_classifieds_data'
Il codice del file rake e un file yml di esempio sono disponibili qui: http: //gist.github .com / 216776
Ora il problema è che quando eseguo l'attività rake, non viene generato alcun errore ma i valori non vengono popolati nel database.
Qualche idea? A proposito, è un ambiente di sviluppo e il database è il database di sviluppo.
Ho eseguito un'attività di rake simile per popolare gli utenti di esempio nel database che ha funzionato. l'ubicazione del file rake "sample_data.rake" si trova in "lib / task".
Soluzione
Il tuo compito sembra buono. L'unica cosa che potrebbe far fallire silenziosamente la tua attività è che il file che stai passando a Fixture.new non punta a un file yml o csv.
Ricontrolla modificando l'istruzione put per stampare l'intero percorso del file che ha importato e confronta ciò che stampa con la tua struttura di directory.
Ad esempio, le cose falliranno silenziosamente se i file del dispositivo iniziano con una lettera maiuscola? Categories.yml invece di categorie.yml
Altri suggerimenti
In rails edge, puoi usare la funzione rake db: seed
per aggiungere dati alla tua base. Guarda il commit .
L'uso è piuttosto semplice.
Crea un file db / seeds.rb
.
E inserisci il codice che vuoi seminare nel tuo database.
Ad esempio:
Category.create!(:name => 'My Category')
Country.create!(:name => 'Cassoulet Land')
E quando si desidera eseguire il seeding del database, è possibile eseguire un rake db: seed
Se, per qualsiasi motivo, non si desidera utilizzare edge (che sarebbe comprensibile in un ambiente di produzione), è possibile utilizzare Seed Fu , che fa al caso tuo.
L'attività db: seed è stata aggiunta in Rails 2.3.4. Quindi non è necessario eseguire edge.
http: //weblog.rubyonrails .org / 2009/9/4 / ruby-on-rails-2-3-4