2011-10-30 2 views
3

変更のために、私はRailsアプリケーションの代わりに、Ramaze、したがってSequel、ベースのアプリを使用しています。Sequel :: Modelを使用して2つのテーブルにまたがるページを作成する方法は?

Iは結合テーブル:external_post_taggings介して多対多の結合テーブル:taggings介し:postsに関連付けられているモデルTag、及び:external_postsとを有しています。

これらの関連付けをまとめて収集し、それぞれのテーブルにcreated_atと呼ばれる日付フィールドで並べ替えたいとします。

改ページがなければ、私はどうなる:

@combined = (@tag.posts + @tag.external_posts).sort_by(&:created_at).reverse 

はしかし、私は改ページを使用する必要があります。それはちょうど私がどうなる.postsた場合:

@posts = @tag.posts.paginate(page, 10) 

が、それも可能だ場合、私は2つのテーブル間でページ付けする方法がわかりません。投稿やexternal_postsは、同じモデルクラスを使用しない限り

@tag.posts_dataset. 
    union(@tag.external_posts_dataset). 
    order(:created_at.desc). 
    paginate(page, 10) 

しかし、これは問題があります:あなたがタグとポストの組み合わせをページ分割したいと仮定すると、

答えて

4

は、おそらく2つの関連データセットの和集合をページ分割したいです。個別のモデルクラスを使用する場合は、それぞれのオフセットを手動で追跡する必要があります。基本的に、各ページに対して、両方の関連付けのための次の10レコードを選択します(適切なオフセットでそれぞれ開始します)。 10の2つのグループを配列に結合し、反転されたcreated_atフィールドでソートし、最初の10個の結果を取ります。その10個の結合/ソートされたレコードの配列内の投稿と外部投稿の数を数え、次のページで使用するために投稿と外部投稿のオフセットを更新します。

たとえば、ページ1では、両方にオフセット0を使用します。結合し、ソートして、最初の10を取った後に、10の配列に7つの投稿と3つの外部投稿があり、2ページ目では7でオフセット、3で外部の投稿がオフセットされます。

+0

うん、彼らは2つの異なるモデルクラスです。だから、私は一度に1ページずつ進んで、オフセットを記録しておく必要があります。私が望むページに到達するまでは? yikes、複雑な音:)私はあなたが正しいと思う。 –

関連する問題