1

假设我有 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

我正在使用导轨 3.2

4

1 回答 1

1

您只需要为学校和用户定义 has-many :through 关系,如下所示:

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

于 2013-03-02T23:44:39.667 回答