1

私はページ付けにカミナリの宝石を使用しています。私は完全にページングするリソースコントローラーを持っています(順序付けの単純な性質のため)。それはここで見ることができます:

@resources = Resource.order("created_at desc").page(params[:page]).per(25)

それはそれらを最新のものから順にソートするだけです。.classを実行すると、activerecord::relationのように見えます

ただし、タグでは、関係(そのタグに割り当てられているリソースの数)で並べ替えたいと思います。

@tags = Tag.all.sort{|a, b| b.number_of_resources <=> a.number_of_resources}.page(params[:page]).per(50)

エラーが発生しますがundefined method、#`のページ'

4

2 に答える 2

0

Tag.all配列を返すため、ARel関係を想定しているため、#page呼び出しは失敗します。

#number_of_resourcesがDB列にマップされている場合、実行する必要があるのは次のとおりです。

Tag.order('number_of_resources').page(params[:page]).per(50)

そうでない場合は、Tagデータベーステーブルに追加するか、kaminariを使用せずにRubyで並べ替え/ページ付けを行う必要があります。これは、タグの数が約1000未満の場合に実行可能です。

データベースに情報を追加する場合は、次の投稿を確認してください:条件付きの列のカウンターキャッシュ?

于 2012-07-03T18:26:24.423 に答える
0

次のようなことを行う必要があります:1)2つのテーブルを結合する、2)タグで行をグループ化する、3)各グループに属する行数をカウントする、4)カウントでその新しい列を使用して順序付けする

優れたSQLステートメントを作成してから、ページネーションを呼び出すことができます

于 2012-07-03T22:00:28.123 に答える