2016-03-25 32 views
-3

有2個表格。一種是Userid,name,email),另一種是Studentid,who_id)。Rails協會的一個小拼圖

我想用這樣的方式:

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

而不是:

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

獲取數據。

我該怎麼辦?

順便說一下,我不能將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 

而一旦你開始工作,而不是Student.find(id).name, Student.find(id).email(它將從數據庫中提取數據兩次),您應該這樣做:

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

是的,這是一個好方法,但我在考慮是否可以創建連接的雙向模型,以便在user.id被銷燬時'student.id'會自動刪除。這是添加'dependent::destroy'。我們可以嗎 ?謝謝! –

+0

我認爲這個問題涵蓋了:http://stackoverflow.com/questions/15939799/has-one-has-many-with-dependent-destroy-but-using-a-different-name-for-the-key –