2016-03-25 5 views
-3

2つのテーブルがあります。 1つはUserid,name,email)であり、もう1つはStudentid,who_id)です。Rails Associationsの小さなパズル

私はこの方法を使用したい:データを取得するために

User.find(student.who_id).name, User.find(student.who_id).email 

Student.find(id).name, Student.find(id).email 

ではなくを。

どうすればよいですか?

btwとなり、何らかの理由でwho_idからuser_idに変更できません。


class User < ActiveRecord::Base 
end 

class Student < ActiveRecord::Base 
end 
+0

このような使用方法の全体を記述してください。 – Aetherus

答えて

0

あなたはそうのように、あなたの学生モデルにnameemailメソッドを追加することができます。

class Student < ActiveRecord::Base 
    belongs_to :user, class_name: :User, foreign_key: 'who_id' 

    def name 
    user.name 
    end 

    def email 
    user.email 
    end 
end 

あなたはまた、より少ないコードで同じことを行うには鉄道のデリゲートメソッドを使用することができます。

class Student < ActiveRecord::Base 
    belongs_to :user, class_name: :User, foreign_key: 'who_id' 
    delegate :name, to: :user 
    delegate :email, to: :user 
end 

あなたがいったん動作したら、ではなく210(これはデータベースから2回データをフェッチします)を実行する必要があります。

student = Student.find(id) #single call to the database 
# get the properties from the previous database call 
student.name 
student.email 
+0

はい、これは良い方法ですが、 'student.id'が破壊されたときに' student.id'が自動的に削除されるように双方向モデルを作成できるかどうかを考えています。これは 'depend::destroy'を追加します。していい ?ありがとう! –

+0

私はこの質問がそれをカバーすると思います:http://stackoverflow.com/questions/15939799/has-one-has-many-with-dependent-destroy-but-using-a-different-name-for-the-key –

関連する問題