2013-03-02 119 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