2016-05-12 5 views
0

Ich möchte einige Beispieldaten für einen Benutzer erstellen, wenn sie sich registrieren, so dass sie nicht mit einer leeren Leinwand beginnen müssen.Erstellen von Demo-Daten für Rails-Anwendung auf Konto-Basis

Ich definiere derzeit viele statische Daten in Klassen, die ich dann über iteriere, aber das Einrichten von Beziehungen ist umständlich und ich denke, dass dies ziemlich spröde ist.

Ich denke, dass einige Demo Fixtures (getrennt von meinem Test-Set) wäre eine gute Möglichkeit, dies zu tun, aber wie Datensätze an ein Konto gebunden sind, kann ich nicht sehen, wie ich diese Daten einfügen und anhängen kann das Konto beim Laden der Fixtures.

Dies ist vielleicht nicht einmal der beste Ansatz, aber wenn es einen besseren Weg gibt, lass es mich wissen.

+0

vielleicht etwas mit Faker/Fabrik Mädchen HILFT? – Doon

+0

Faker könnte für einen Teil des Inhalts funktionieren, aber ein großer Teil wird domänenspezifisch sein. – apchester

Antwort

0

Jede RAILS-Anwendung hat seeds.rb in db/ Ordner.So wie der Name sagt, es wird verwendet, um Ihre db standardmäßig Datensätze, die Sie wollen, zu seed. Also das ist, wie ich meine seeds.rb.Creating viele Datensätze verwenden, Konstanten und dann die Datensätze in Ihrem db zu setzen, führen Sie einfach rake db:seed Sie db ready.See angenommen haben HERE für mehr infor

meine Samen. rb

###seed eventype table with default values 
["birthday","farewell","party"].each do |f| 
    EventType.find_or_create_by({name:f.upcase}) 
end 

###create users with random names 
##after creating users,create associated fields 

%w[mike john paul allen harry betty].each_with_index do |name,index| 
    @user = User.find_or_create_by({email:"user_#{name}@gmail.com"}) 

    ##user has_one address 
    @user.create_address({:address_2=>"street 1,near berry lane"}) 

    ##user has_many pictures 
    @user.pictures.create!({:title=>"Title of the picture",:picture => File.new("#{Rails.root}/public/images/test.jpg")}) 


end 

Sie sogar (0..6).each do Schleife n Datensätze erstellen können, wie Sie in db möchten. zum Beispiel: -

(0..100).each do 
    ###create user/pictures etc 
end 

aber Sie müssen vorsichtig sein, alle Validierungen und erstellen gültige Datensatz sonst diese nicht funktionieren zu folgen. Wenn Sie beispielsweise im Benutzermodell den Benutzernamen erwarten, müssen Sie in seeds.rb den Benutzernamen übergeben, damit er die Überprüfung problemlos bestehen kann.

============================================ ========================== Wenn Sie db Seed nicht verwenden möchten, können Sie einen Rückruf on: :create verwenden (ich dont sein möchte, kann .Einfache Beispiel Beobachter):

##in user.rb 
after_commit :create_default_account, on: :create 

def create_default_account 
##assuming user has_one :account 
self.build_account({:name=>"Default account"}) 
end 

HOPE IT

+0

Ich muss die Datenbank nicht erstellen, sondern Inhalt innerhalb eines Benutzerkontos erstellen, wenn ein Benutzer sich so registriert, dass er seinen eigenen Demo-Inhalt zum Spielen hat. – apchester

+0

Ich habe meine Antwort mit einer anderen Option abgesehen von Seed.try das aus. @ Apchester aktualisiert – Milind

Verwandte Themen