2017-02-22 55 views
1

我有幾個型號: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 

我現在要做的,是顯示賭場,屬於最高平均收視提供商。我試圖做到不行。像這樣在軌控制檯:

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

嘗試這樣:

provider.casinos.order('average_rating asc') 

一兩件事。 provider = Provider.all[1]將需要很多時間來執行。請嘗試使用ID查找記錄。 provider = Provider.find(ID)

如果平均評分是類方法,那麼您不能使用where子句運行它。你應該更好地使用sort_by方法如下:

provider.casinos.sort_by(&:average_rating) 
+0

不起作用,給我同樣的錯誤。我只在rails控制檯中執行'provider = Provider.all [1]',當然,在最終版本中,它將會失敗。像這樣:<%Provider.all.each do | provider | %><%= provider.casinos.and_so_on%><% end %>' –

+0

'列casinos.average_rating不存在'錯誤提示average_rating不存在於賭場表中。你能否正確地檢查欄目名稱? –

+0

'average_rating'是賭場模式中的一種方法,它不會作爲數據庫表中的列出現。 –