加盟与活动记录
问题描述:
让我们说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.name
,reviews.content
和reviews.rating
,users.name
我试过这个,但它只返回审查数据而不是加入部分。
Review.joins(:school, :user).select("content, rating, schools.name, users.name").all
我使用轨道3.2
答
你只需要定义了一对多的:通过对学校和用户这样的关系:
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
我已经定义了,我想你误解了这个问题。我想加入表格不仅仅只查找一个对象模型和它的关联。 – SHUMAcupcake 2013-03-02 23:47:52
为了检索所有的评论,你只需要做@reviews = Review.all,每个评论都会有我描述的方法,这些方法将完全*做你的问题。 – vlasits 2013-03-02 23:51:17
@reviews = Review.include(:school,:user)将执行三向连接。 – Swards 2013-03-02 23:55:10