假设我有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}
如何编写rails作用域或方法,连接所有3个表并获取列
schools.name
,reviews.content
和reviews.rating
,users.name
我试过这个,但它只返回评论数据,而不是连接部分。
Review.joins(:school, :user).select("content, rating, schools.name, users.name").all
我正在使用rails 3.2
答案 0 :(得分:1)
你只需要定义has-many:通过学校和用户之间的关系:
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
在Review控制器中,您可以
def index
@reviews = Review.all
end
然后在您的视图中,每个评论对象都会有一个学校和一个与之关联的用户,所以您只需这样做:
review.content, review.rating, review.user.name, review.school.name
阅读此内容有助于您了解原因:http://guides.rubyonrails.org/association_basics.html