2017-10-19 12 views
0

ここに私のDBスキーマがあります。 NOTE 'studentid' と 'student_studentid'Railsでカスタムテーブルの関連付けを設定する方法

create_table "students", force: true do |t| 
    t.string "fname",  limit: 45 
    t.string "lname",  limit: 45 
    t.string "guardian", limit: 45 
    t.string "phone",  limit: 45 
    t.string "email",  limit: 45 
    t.integer "user_id" 
    t.date "createdate" 
    t.string "studentid", limit: 45 
    end 

    create_table "term_reports", force: true do |t| 
    t.string "student_studentid", limit: 10 
    t.integer "subject_id" 
    t.integer "score" 
    t.integer "position" 
    t.integer "term" 
    t.integer "year" 
    t.integer "user_id" 
    t.date "ceatedate" 
    end 

私は学生にカスタムidを割り当てています。どのようにしてこれらの列をテーブルの関連付けに使用できますか? TermReport.find( 'my-id-10')。studentと言うことができます。

私が試したことはありますが、うまくいきません。

class TermReport < ActiveRecord::Base 
belongs_to :student, :primary_key => :studentid 
end 

class Student < ActiveRecord::Base 
has_many :term_reports, primary_key: :stuent_studentid 
end 

答えて

0

ここでの問題は、関連付けに不正な属性を使用していることです。あなたはTermReportはまだその主キーとしてIDを使用している複数の参照用here

TermReport 
    belongs_to :student, foreign_key: studentid 

Student 
    has_many :term_reports, foreign_key: :stuent_studentid 
+0

TermReport.find( 'jm-90')。学生はまだ動作しません。私の答えの出力を参照してください。 –

+0

学生用のカスタムプライマリキーを設定する方法については、https://stackoverflow.com/questions/32579245/creating-custom-primary-keys-in-rails-applicationを参照してください。 – Maru

0

を見ることができます。以下の出力を参照してください。

TermReport.find('jm-90').student 

TermReport Load (0.7ms) SELECT `term_reports`.* FROM `term_reports` WHERE `term_reports`.`id` = 0 LIMIT 1 
ActiveRecord::RecordNotFound: Couldn't find TermReport with 'id'=jm-90 
関連する問題