2011-06-24 7 views
0

私は25年以上にわたって年間約100のオブジェクトを収集しています。特定のオブジェクトにドリルダウンするのが簡単になるように、ページごとに年ごとにリストするのが良いでしょう。固定数のアイテムではなく、年ごとにRailsコレクションを改ページするためのプラグインまたは宝石はありますか?たぶん月でさえ?これを行うためにwill_paginateを適応させることは可能でしょうか?年ごとに結果を改ページできますか?

EDIT:

ss = Services.all.group_by { |s| s.date_of_service.year }

これは私がキーでページ付けすることができ、その上注文したハッシュを生成します。

ss.keys.each { |k| p ss[k].count }

答えて

1

私はあなたがそのような宝石を見つけるとは思わない。また、スコープを使用して簡単にページネーションシステムを実装するのは難しいことではありません。

何年も前から別のテーブルを持っていないとします。したがって、一意の年の完全なリストを取得するには、groupメソッドを使用する必要があります。

scope :years, lambda { select('year').group('year') } 
    scope :year, lambda { |year| where(:year => year) } 

他のオプションは、ケルイリンが提案したものである。 yearスコープのページネーション宝石(私はカミナリを使用)を使用してください。

+0

私はRails 2.xです。私は 'named_scope:year、lambda {| y | {:conditions => "YEAR(date_of_service)=#{y}"}} 'の2番目の部分ですが、これはすべて私が最初に思いつくことができます。確かに良い方法があります.'def self.years; ys = []; Service.all.collect {| s | ys << s.date_of_service.year}; ys.uniq!最後に –

+0

私はrails2の経験はありませんが、 'lambda {find(:select => 'year'、:group => 'year')}' – bassneck

+0

Coolを使うことができるはずです。私は ':select'がRails 2で利用可能であることを知りませんでした。あなたのメソッドは、単一の属性を持つオブジェクトのリストを取得します。私はそれが属性を返すと思った。私はクラスメソッドが私に与える年のリストがほしいと思う。とにかく、私はこれを見つけました。多分私はそれからいくつかのマイレージを得ることができます:http://stackoverflow.com/questions/3488534/using-lambda-in-find-in-rails –

0

私はwill_paginateを用いた一般的なページネーションを実装すると思います。表示している年に関係なく、ページあたり10-25件の結果が表示されます。

次に、いくつかの良いAR/SQLマジックを使用して年ごとに結果を表示するための2番目のフィルタリングメカニズムを実装します。私のアプリでは、ドロップダウンを使って年を選択しましたが、あなたは他のUI要素を利用することができます。

will_paginateが年単位で問題を解決できるかどうかは確かではありませんが、ニーズに合わせてカスタマイズすることはお勧めしません。あなたがmonkeypatchしない限り、ちょうど互換性の問題を作成します。

関連する問題