【发布时间】:2015-07-06 09:52:18
【问题描述】:
因此,我尝试按平均评分对我的提供商(类似于用户)索引进行排序,最高的在顶部。它可以工作,但会为提供者拥有的每个评论添加一个额外的行。例如。如果我有一个提供 3 条评论的提供者,则该提供者将在提供者索引中显示 3 次。评分是评论上的一列,是 1-5 之间的整数。
provider.rb
class Provider < ActiveRecord::Base
belongs_to :user, foreign_key: 'user_id', autosave: true
has_many :reviews, dependent: :destroy
end
review.rb
class Review < ActiveRecord::Base
belongs_to :user, foreign_key: 'user_id'
belongs_to :provider, foreign_key: 'provider_id'
end
providers_controller.rb
class ProvidersController < ApplicationController
before_action :set_provider, only: [:show, :edit, :update, :destroy]
def index
@providers = Provider.all
.joins(:reviews)
.order("reviews.rating DESC")
@reviews = Review.find_by(params[:provider_id])
end
index.html.erb
<% @providers.each do |provider| %>
<tr>
<td><%= link_to provider.name, provider_path(provider.id) %></td>
<td><%= provider.industry %></td>
<td><%= provider.experience %></td>
<td><%= provider.description %></td>
<td><%= provider.reviews.average(:rating) %></td>
</tr>
<% end %>
这可能真的很愚蠢,因为我对 Ruby + Rails 很陌生,但我似乎无法弄清楚/找到相关信息。我尝试将“AVG(reviews.rating) DESC”添加到 order 方法,但这给了我一个 SQLite 异常错误。
任何帮助将不胜感激!!!如果需要,很乐意提供更多信息。
【问题讨论】:
标签: ruby-on-rails sqlite postgresql ruby-on-rails-4