我一直试图通过平均评分和按降序排列的评论总数来获取要在我的rails应用中订购和显示的餐馆列表。到目前为止,我能够正确地从数据库(psql)收集和订购它们,但问题是没有任何评论或评级的餐馆不会出现在列表中(这意味着它们不是显示在前端)。这些是我的模特:
class Restaurant < ActiveRecord::Base
belongs_to :user
has_many :reviews, dependent: :destroy
validates :name, length: {minimum: 3}, uniqueness: true
end
class Review < ActiveRecord::Base
belongs_to :restaurant
belongs_to :user
validates :rating, presence: true, inclusion: (1..5)
end
以下是在数据库控制器中从数据库请求数据的代码:
def index
if params[:search]
@restaurants = Restaurant.search(params[:search]).order("created_at DESC")
else
@restaurants =Restaurant.joins(:reviews).group("restaurants.id").order("AVG(reviews.rating) DESC")
end
end
我在这里明显遗漏了一些东西,但我不知道是什么!搜索到处都找到答案,但无法找到答案。理想情况下,我希望没有评级或评论的餐厅按照创建的顺序显示在列表底部
答案 0 :(得分:2)
默认情况下,Rails连接是一个内连接。所以它不包括没有评论的餐馆。
def index
if params[:search]
@restaurants = Restaurant
.search(params[:search])
.order(:created_at => :desc)
else
@restaurants = Restaurant
.joins('LEFT JOIN reviews ON restaurants.id = reviews.restaurant_id')
.group('restaurants.id')
.order('AVG(reviews.rating) DESC NULLS LAST')
end
end