构建一个查询,将结果显示模型方法

时间:2017-02-22 15:27:34

标签: ruby-on-rails activerecord

我有几个模型:ProviderCasinoRatingCasino_provider

Provider.rb:

class Provider < ApplicationRecord
  has_many :casino_providers
  has_many :casinos, through: :casino_providers
end

Casino.rb:

class Casino < ApplicationRecord
  has_many :ratings, dependent: :destroy
  has_many :casino_providers
  has_many :providers, through: :casino_providers

  def average_rating
    if ratings.count == 0
      ratings.sum(:score).to_f / 1
    else
      ratings.sum(:score).to_f / ratings.count
    end
  end

end

Rating.rb:

class Rating < ApplicationRecord
  belongs_to :casino
end

Casino_provider.rb:

class CasinoProvider < ApplicationRecord
  belongs_to :casino
  belongs_to :provider
end

我要做的是向赌场展示属于平均评分最高的提供商。我试着去做。在rails console中是这样的:

provider = Provider.all[1] #This is the provider, that has a casino in db
provider.casinos.where(casinos: {average_rating: :asc}) #Gives me an error: 'ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column casinos.average_rating does not exist'

由于average_rating不是赌场表中的列,如何在查询中使用此方法?非常感谢。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

provider.casinos.order('average_rating asc')

还有一件事。 provider = Provider.all[1]将需要很长时间才能执行。尝试使用ID查找记录。 provider = Provider.find(ID)

如果平均评级是类方法,那么您不能使用where子句运行它。你应该更好地使用如下的sort_by方法:

provider.casinos.sort_by(&:average_rating)