2016-03-25 20 views
-3

2 tablo var. Biri User (id, name, email) ve diğeri Student (id, who_id) 'dir.Rails Associations adlı küçük bir bulmaca

İstiyorum kullanın bu şekilde:

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

ziyade:

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

verileri almak için.

Nasıl yapmalıyım?

btw, who_id - user_id hiçbir şekilde değiştiremiyorum.


class User < ActiveRecord::Base 
end 

class Student < ActiveRecord::Base 
end 
+0

Bu tür kullanımların tüm içeriğini verin. – Aetherus

cevap

0

Çok gibi, Öğrenci modelinde name ve email yöntemleri ekleyebilirsiniz:

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 

Ayrıca daha az kod aynı şeyi yapmak Rail temsilci yöntemi kullanabilirsiniz:

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

Ve bir kez çalıştıktan sonra,yerine 210 (veriyi veritabanından iki kez alır) bunun yerine aşağıdakileri yapmalısınız:

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

Evet, bu iyi bir yöntemdir, ancak çift yönlü modeller oluşturabiliriz diye düşünüyorum, böylece "user.id", user.id işlevi yok edildiğinde otomatik olarak silinecek. Bu bağımlıdır:: yok. Bilir miyiz ? Teşekkürler! –

+0

Bu sorunun aşağıdakileri içerdiğini düşünüyorum: http://stackoverflow.com/questions/15939799/has-one-has-many-with-dependent-destroy-but-using-a-different-name-for-the-key –