我有几个模型:Provider
,Casino
,Rating
和Casino_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
不是赌场表中的列,如何在查询中使用此方法?非常感谢。
答案 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)