2017-04-02 5 views
-1

Ich habe zwei Modelle, Project und Todo.Laden von Daten von Fixtures in die Datenbank (Assoziationen)

Projekt speichert eine Reihe von Todos.

Migration für Projekt:

def up 
    create_table :projects do |t| 
     t.string :title, null: false 
     t.timestamps null: false 
    end 
    end 

Migration für Todo:

def up 
    create_table :todos do |t| 
     t.string :text, null: false 
     t.boolean :isCompleted, null:false 
     t.integer :project_id, null:false 
     t.timestamps null: false 
    end 
    end 

project.rb

class Project < ActiveRecord::Base 
    has_many :todos 
end 

todo.rb

class Todo < ActiveRecord::Base 
    belongs_to :project 
end 

projects.yml

family: 
    title: 'Семья' 

work: 
    title: 'Работа' 

therest: 
    title: 'Прочее' 

todos.yml

family_todos: 
    text: 'Купить молоко' 
    isCompleted: false 
    project_id: family 

work_todos: 
    text: 'Закончить проект' 
    isCompleted: false 
    project_id: work 

therest_todos: 
    text: 'Познать бесконечность' 
    isCompleted: true 
    project_id: therest 

Wie kann ich sie richtig zu verbinden, so dass, wenn ich ein Projekt nennen kann ich alle todos darin sehen? Außerdem bin ich gespannt wie ich das Datum über die Yml-Dateien wie ein Array hinzufügen kann?

Antwort

0

Eines der besseren Weg, um die Assoziation zwischen Tabellen zu verknüpfen ist durch Referenzen verwenden. Sie können ein Feld namens project_id in Ihrer todos Tabelle

def up 
create_table :todos do |t| 
    t.string :text, null: false 
    t.boolean :isCompleted, null:false 
    t.references :project, references: :projects, index: true, foreign_key: true 
    t.timestamps null: false 
end 
end 

zu Ihrem todos Tisch tun dies Dies erstellen. Daher haben Sie eine Projekttabelle mit has_many Todos.

Es gibt verschiedene Möglichkeiten, die Datenbank vorzuladen. Sie können die Datei samen.rb verwenden, in die Sie Ihren Code schreiben können, um ihn aus der XML-Datei zu lesen und in die Datenbank zu laden. Sie können

proj = Project.create(title: family) 

so etwas wie dies tun, wenn Sie eine Reihe von die ganze Familie todos haben, dann können Sie es in der Datenbank wie diese setzen

##Family todos 
loop through 
    proj.todos << Todo.create(...fields...) 
end 
+0

Können Sie mir antworten - ich, wie ich bekommen kann alle Todos? Zum Beispiel muss ich alle Todos aus meinem Familienprojekt drucken. <% = project.todos. . .%> – NanoBreaker

+0

Sie können <% = Project.where (title: "family"). Todos%> –

0

Wenn Sie Ihre Datenbank vorab ausfüllen möchten, verwenden Sie seeds.rb, die sich in db/ befindet.

Einfach Rubin verwenden hier und Klassen aus Ihrer Rails-Anwendung, zum Beispiel ein Projekt erstellen und eine todo dafür:

project = Project.create!(...) 
project.todos.create!(...) 

Und dann einfach rake db:seed laufen, um sie auszuführen.

Sie können hier mehr mit Beispielen lesen: http://www.xyzpub.com/en/ruby-on-rails/3.2/seed_rb.html

Verwandte Themen