5

Sto tentando di implementare una relazione has_many e belongs_to su rotaie con una chiave esterna ma ho difficoltà a provare a implementarla correttamente, qualsiasi aiuto sarebbe apprezzato. Sto anche usando questo come guida: http://guides.rubyonrails.org/association_basics.htmlRails has_many e belongs_to rapporto con l'errore della chiave esterna

I due modelli sono soggetti e lezioni. Un soggetto ha molte lezioni e una lezione appartiene a un argomento. La chiave esterna è subject_code.

Quanto segue è il codice pertinente.

Soggetto Modello

class Subject < ActiveRecord::Base 
        :subject_code, 
        :subject_name 
        :lessons_attributes 

    has_many :lessons, 
      :foreign_key => "subject_code" 

    accepts_nested_attributes_for :lessons, 
           :allow_destroy => true 
end 

Il modello lezione.

class Lesson < ActiveRecord::Base 
    attr_accessible :lesson_id, 
        :lesson_type, 
        :subject_code 

    belongs_to :subject, 
      :class_name=>"Subject", 
      :foreign_key=>"subject_code" 

end 

Non sono sicuro di dove ho sbagliato con questa implementazione perché non riesco a recuperare le lezioni da un argomento. La mia tabella di database per lezione ha già una colonna per subject_code.

Mentre fare in giro, ho scoperto che se per il mio modello soggetto ho apportare le seguenti modifiche

has_many :lessons, 
      :foreign_key => "lesson_id" 

sono stato in grado di recuperare le informazioni sulle lezioni, ma con la lesson_id legata al icLsoggetto. Tuttavia, avendo la chiave esterna modificata in subject_code, non ha funzionato e sono solo confuso sul perché.

Qualsiasi aiuto sarebbe apprezzato.

+0

rimuovere il ': foreign_key => "subject_code"' in 'modello subject'. – VenkatK

+0

Viene visualizzato questo errore quando lo faccio.S.SQLite3 :: SQLException: nessuna di queste colonne: lessons.subject_id: SELECT "lessons". * FROM "lessons" WHERE "lessons". "Subject_id" = 8 –

risposta

4

in salvo Modello

has_many :lessons, :primary_key => "subject_code" 
+0

Grazie. Tuttavia, sto ottenendo questo errore. SQLite3 :: SQLException: nessuna colonna: lesson.subject_id: SELECT "lessons". * FROM "lessons" WHERE "lessons". "Subject_id" = 'CM101' dopo averlo fatto. –

+0

Sembra che potrebbe essere più semplice seguire la convenzione di rotaie dell'uso di subject_id –