1

一部のモデルに投票できるRailsアプリがあります。私のモデルの 1 つで、default_scope投票数が最も多いオブジェクトが最初に表示されるように変更したいと考えています。モデルファイルで次のことを試しました:

def self.default_scope
  order('votes_for.size DESC')
end

これにより、次のエラーが表示されます。

SQLite3::SQLException: no such column: votes_for.size: SELECT "solutions".* FROM "solutions"  WHERE "solutions"."competition_id" = ?  ORDER BY votes_for.size DESC

デフォルトのデフォルトのソート順を変更する方法があるのだろうか、私がやっていることは明らかに機能していません。

可能であれば、コントローラ レベル (デフォルトの順序ではない) で動作させるためのソリューションもいいでしょう。

4

1 に答える 1

2

なぜvotes_for.sizeですか?votes_for私は、整数のタイプであり、各レコードの投票数を保持するデータベースの属性であると想定しています。だからそうあるべきですvotes_for DESC

class MyModel < ActiveRecord::Base
  default_scope { order('votes_for DESC') } 
end

更新( votes_for が gem のメソッドであり、db の属性ではないことがわかった後)

投票のキャッシュを使用する必要があります: https://github.com/ryanto/acts_as_votable#caching 次に、以下を使用してスコープを作成できます。

Solution.order(:cached_votes_up => :desc)

また

default_scope { order(:cached_votes_up => :desc) } 
于 2014-07-16T19:55:33.827 に答える