2016-06-23 30 views
2

整数を返すモデルでメソッドをソートする方法を理解しようとしています。整数を返すモデルメソッドでransackをソート

class Business < ActiveRecord::Base 

    has_many :questions 

    def questions_count 
    questions.count 
    end 
end 

私は掻き回すを使用して、私のテーブル内のquestions_count方法でソートできるようにしたいと思います。

私は運が無かった<th><%= sort_link @q, :questions_count %></th>を試しました。

これも可能ですか?どうすれば達成できますか?

答えて

2

sort_linkヘルパーメソッドは属性またはアソシエーションの属性のみを受け入れることができますが、関連レコードの数、これは既存のレール機構を使用して可能です。

これを達成する最も簡単な方法は、counter_cacheを使用して、関連するモデルに属するオブジェクトの数を数える方法です。これをあなたが実際にこの名前をカスタマイズすることができ、それはまたしかし、questions_countと呼ばれるビジネステーブルのデータベース列を必要と

has_many :questions, counter_cache: true 

を(と:あなたはこのようなあなたのビジネスモデルに関連する本を追加する必要がありますあなたが質問の数をsort_linkメソッドに渡せるようにするものです)。

これを設定したら、問題なくsort_linkヘルパーメソッドを呼び出すことができます。

sort_link @q, :questions_count 

counter_cache hereについての詳細を検索します。

また、これを達成するための別の方法があります。代わりにransackerを定義することができます。これを使用して、ビジネスに関連するすべての質問に対してCOUNT機能を実行できるSQL文を明示的に記述することができますが、counter_cacheメソッドと同じように便利だとは思いません。主にSQL文がquestions_countメソッドの機能を再定義/置き換えるためです。

ransackersについて詳しくはhereをご覧ください。

0

はい、@collection.sort_by{|item| item.method_name}などを使用して並べ替えることができます。 "@collection"をアイテムセットで置き換え、 "method_name"をソートするメソッドで置き換えます。

+0

これはransackを使用していませんが.... – Deekor

+0

@collectionはあなたのransack検索の結果です。 Model.search(params)のようなもの.sort_by {| item | item.method_name} –

+0

しかし、それは毎回ソートされます。ソートリンクがクリックされたときにソートするだけです。 – Deekor

関連する問題