2017-01-28 7 views
0

Ich habe mit einigen Problemen mit dem Hinzufügen eines neuen Datensatzes in meiner Schüler-Tabelle ausgeführt. Grundsätzlich habe ich 3 Tabellen, die miteinander verbunden sind: Studenten, Lehrer, eingeschriebene Themen und Themen.ActiveRecord :: AssociationTypeMismatch - Ruby on Rails

Das Hauptproblem dabei ist, dass die Themen Tabelle deklariert wurde: string sowohl Schüler und Lehrer Tisch bei der Migration, sondern für ein Array zu fragen statt:

Class CreateStudents < ActiveRecord::Migration[5.0] 

    def up 
    create_table :students, :id => false do |t| 
    t.integer "student_id", :auto_increment => true, :primary_key => true 
    t.string "first_name", :limit => 25 
    t.string "last_name", :limit => 50 
    t.string "email", :default => ' ', :null => false 
    t.string "birthday" 
    t.string "subjects" 
    t.string "username", :limit => 25 
    t.string "password_digest" 
    t.timestamps 
    end 
    end 

    class CreateTeachers < ActiveRecord::Migration[5.0] 
     def up 
     create_table :teachers, :id => false do |t| 
      t.integer "teacher_id", :auto_increment => true, :primary_key => true 
      t.string "first_name" 
      t.string "last_name" 
      t.string "email", :default => ' ', :null => false 
      t.string "birthday" 
      t.string "subjects" 
      t.string "username", :limit => 25 
      t.string "password_digest" 
      t.timestamps 
     end 
     end 

class CreateSubjects < ActiveRecord::Migration[5.0] 
    def up 
    create_table :subjects, :id => false do |t| 
     t.integer "subject_id", :auto_increment => true, :primary_key => true 
     t.string "subject_name" 
     t.timestamps 
    end 
    end 

class CreateEnrolledSubjects < ActiveRecord::Migration[5.0] 
    def up 
    create_table :enrolled_subjects, :id => false do |t| 
     t.integer "subject_id" 
     t.integer "teacher_id" 
     t.integer "student_id" 
    end 
    end 

Unten ist mein Code, wenn eine Aufzeichnung innerhalb Schienen Hinzufügen Konsole:

new_studend = Student.create(:student_id => 1, :first_name => 'Karl', :last_name => 'Geek', :email => '[email protected]', :birthday => '12/04/1995', :subjects => ["English"], :username => 'samnorton2', :password => 'Grace02112') 

ich auch versucht:

new_student = Student.create(:student_id => 1, :first_name => 'Jos', :last_name => 'Norton', :email => '[email protected]', :birthday => '12/05/1995', :subjects => 'English', :username => 'samnorton2', :password => 'Grace02112') 

Aber ich habe einen Fehler beides:

Wenn ich string 'Englisch' verwendet:

NoMethodError: undefined method `each' for "English":String 

Als ich Array verwendet: Themen => [ 'Englisch']

ActiveRecord::AssociationTypeMismatch: Subject(#70237743894000) expected, got String(#70237706174560) 

Ich bin Ich bin mir nicht sicher, was hier passiert. Aber es braucht Zeit, um mich zu lösen. Für meine Modelle gebe ich einfach die ff-Codes ein:

Irgendeine Idee? Entschuldigung, ich bin eine neue ROR. Hoffe, jemand kann mir helfen und in der Laienzeit erklären, was hier passiert.

+1

Ich sehe Ihre 'Themen' Tabelle hier nicht. Wenn Sie möchten, dass Student viele Themen und Betreff viele Studenten hat, dann benötigen Sie eine Joins-Tabelle. – HarlemSquirrel

+0

http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association – HarlemSquirrel

+0

bearbeitet bereits HarlemSquurnett –

Antwort

0

Die subjects Stringspalte für Lehrer und Schüler steht im Widerspruch zu dem, was Ihnen Schienen in einer has_many Assoziation gibt. Sie sollten diese Spalten löschen.

def change 
    remove_column :students, :subjects 
    remove_column :teachers, :subjects 
end 
Verwandte Themen