使用活动记录加入3个或更多表

时间:2013-03-02 23:29:34

标签: ruby-on-rails ruby ruby-on-rails-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}

如何编写rails作用域或方法,连接所有3个表并获取列 schools.namereviews.contentreviews.ratingusers.name

我试过这个,但它只返回评论数据,而不是连接部分。

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

我正在使用rails 3.2

1 个答案:

答案 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