2
c = Course.create name:"Math1", ?? 

Ich versuche, herauszufinden, wie dieser Kurs zu den bestehenden Studenten zu assoziieren mit has_and_belongs_to_many. Unten ist mein Schema mit den Assoziationen. Ich habe Probleme, Instanzen von jedem zu erstellen und ihre spezifischen Assoziationen zu setzen.Wie ein has_and_belongs_to_many Verein zu machen, wenn eine Instanz eines Modells

ActiveRecord::Schema.define(version: 20170127225124) do 

    create_table "courses", force: :cascade do |t| 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "students", force: :cascade do |t| 
    t.string "username" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "students_courses", id: false, force: :cascade do |t| 
    t.integer "students_id" 
    t.integer "courses_id" 
    t.index ["courses_id"], name: "index_students_courses_on_courses_id" 
    t.index ["students_id"], name: "index_students_courses_on_students_id" 
    end 

end 

Antwort

0

Nun .. in einem has_and_belongs_to_many Verein, den Sie brauchen sich nicht um die Mitte Tisch zu kümmern. Here Sie können die Methoden finden, die durch diese Art von Assoziation zu dem Modell hinzugefügt werden.

also eine Möglichkeit, dies zu tun, indem es eine Reihe von Studenten-IDs vorbei, wie:

student = Student.create username: "John" 
c = Course.create name: "Math1", student_ids: [student.id] 

Sie könnten auch die create-Methode verwenden:

c.students.create({username: "John"}) 

Achten Sie auch darauf mit Ihrer Join-Tabelle. Standardmäßig erwartet Schienen, dass es in der alphabetischen Reihenfolge ist, also würde courses_students stattdessen sein. Zu diesem Zweck bevorzuge ich normalerweise den Befehl create_join_table (Referenz here).

Verwandte Themen