2013-03-02 132 views
1

讓我們說3臺以上我有3個表:加盟與活動記錄

schools{id, name, desc, adress} 
reviews{id, content, rating, school_id, user_id} # user_id & schoold_id is foregin keys 
users{id, name, city} 

我怎樣寫一個軌道範圍或方法連接所有3個表,並搶列 的schools.namereviews.contentreviews.ratingusers.name

我試過這個,但它只返回審查數據而不是加入部分。

Review.joins(:school, :user).select("content, rating, schools.name, users.name").all 

我使用軌道3.2

回答

1

你只需要定義了一對多的:通過對學校和用戶這樣的關係:

class School < ActiveRecord::Base 
    has_many :users, :through => :reviews 
end 
class Review < ActiveRecord::Base 
    belongs_to :users 
    belongs_to :schools 
end 
class User < ActiveRecord::Base 
    has_many schools, :through => reviews 
end 

在您的評論控制器,你可以做

def index 
    @reviews = Review.all 
end 

然後在您的觀點中,每個評論對象將有一所學校和一個與之相關的用戶,所以你只是做:

review.content, review.rating, review.user.name, review.school.name 

讀這將有助於你理解爲什麼:http://guides.rubyonrails.org/association_basics.html

+0

我已經定義了,我想你誤解了這個問題。我想加入表格不僅僅只查找一個對象模型和它的關聯。 – SHUMAcupcake 2013-03-02 23:47:52

+0

爲了檢索所有的評論,你只需要做@reviews = Review.all,每個評論都會有我描述的方法,這些方法將完全*做你的問題。 – vlasits 2013-03-02 23:51:17

+0

@reviews = Review.include(:school,:user)將執行三向連接。 – Swards 2013-03-02 23:55:10