2016-04-16 11 views
0

Ich habe zwei Modelle mit einer Verbindung has_and_belongs_to_many verbunden: Kurse und Semester. rails_admin gab mir nur die Möglichkeit, bei der Erstellung eines Kurses Semester hinzuzufügen, und nicht umgekehrt (und es ist viel nützlicher, Kurse bei der Erstellung eines Semesters hinzuzufügen). Ich habe einige Verbesserungen, die Migration:rails_admin mit veralteten Tabellennamen

def change 
    create_table "courses", force: :cascade do |t| 
     t.string "department" 
     t.integer "number" 
     t.datetime "created_at", null: false 
     t.datetime "updated_at", null: false 
    end 

    create_table "semesters", force: :cascade do |t| 
     t.integer "year" 
     t.string "season" 
     t.datetime "created_at", null: false 
     t.datetime "updated_at", null: false 
    end 

    create_table "semesters_courses", id: false, force: :cascade do |t| 
     t.integer "semester_id" 
     t.integer "course_id" 
    end 

    add_index "semesters_courses", ["course_id"], name: "index_semesters_courses_on_course_id" 
    add_index "semesters_courses", ["semester_id"], name: "index_semesters_courses_on_semester_id" 
    end 

I umbenannt Vermittler Tabelle semesters_courses von courses_semesters, nur für Klarheit. Nicht nur dies das Problem nicht lösen, aber jetzt, wenn ich versuche, einen neuen Kurs hinzufügen, es 500s und sagt mir:

kann nicht table ‚courses_semesters‘ gefunden

Ich weiß, ich könnte machen Das geht weg, indem ich den Namen zurück ändere, aber ich bin mir nicht sicher, woher railsadmin diesen Namen bekommt (und vermute, dass dies die Quelle meines Problems ist). Ich habe railsadmin entfernt und neu installiert, die Tabellen gelöscht und neu geschrieben und den Cache meines Browsers gelöscht. Wenn ich meinen gesamten Projektbaum nach "courses_semesters" durchsuche, erhalte ich nur Ergebnisse in meinem Fehlerprotokoll.

Neu bei Rails dev, also nehme ich an, ich vermisse etwas Config-Datei irgendwo, die ich aktualisieren muss, würde aber gerne Hilfe auf, wo es zu finden.

Antwort

0

Sie überschreiben den Join-Tabellennamen.

Option 1 Sie den Namen der Join-Tabelle in Ihren Modellen

app/models/course.rb

has_and_belongs_to_many :semesters, join_table: "semesters_courses" 

app/models/semester.rb angeben müssen

has_and_belongs_to_many :courses, join_table: "semesters_courses" 

Oder Option 2 Benennen Sie Ihre Join-Tabelle einfach in "courses_semesters" um, indem Sie die Migration verwenden.

rails g migration rename_courses_semesters 

class RenameCoursesSemesters < ActiveRecord::Migration 
    def self.up 
    rename_table :semesters_courses, :courses_semesters 
    end 

    def self.down 
    rename_table :courses_semesters, :semesters_courses 
    end 
end 

Hoffe das beantwortet Ihre Frage.

+0

Brilliant! Ich kann nicht glauben, dass ich das nirgendwo finden könnte. Danke vielmals. –

+0

Gern geschehen! : D – thanhnha1103