2017-07-16 9 views
0

同じクエリを共有するモデルの2つのテーブルがありますが、それらを別々にクエリするので、ページングは​​頭痛になる可能性があります。2つの別々のモデル、統一が必要

私たちはビデオモデルとイメージモデルを持っています。 作成日に基づいてフェッチする場合は、2つのクエリを別々に実行し、それらを統一し、再ソートして再度制限する必要があります。 頭痛は、ページネーションも同様に、2つの別々のオフセットが必要です。

あなたはポイントを得る。 何とか統一したい。問題は、複雑なアプリケーションに根ざしているため、1つの大きなテーブルに統合できないということです。 ActiveRecordが単一のテーブルを管理するためにActiveRecordのソリューションをどのように備えているのか疑問に思っていました。おそらく、独自のIDを持つ大きなAssetsテーブルと特定のモデルのreference_idを作成する必要がありますか?

ありがとうございます!

答えて

1

ActiveRecord :: NestedAttributesが役立つかもしれません。詳細情報については

params = { video: { name: 'video', image_attributes: { icon: 'image' } } } video = Video.create(params[:video]) video.avatar.icon # => 'image'

class Video has_one: image accepts_nested_attributes_for :image end

this linkを確認してください。

+0

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 16727957) – Grandpa

+1

完了しました。インフォメーションありがとう –

0

私はどのデータベースを使用しているのかわかりませんが、同様の問題に直面し、SQLビューが解決策として出現しました。マイグレーションファイルでこれらの2つのテーブルを結合するビューを作成し、画像とビデオの両方を表す新しいモデルを作成してください。モデルでは、テーブル名と主キーを指定する必要があります。

self.primary_key = :id 
self.table_name = 'name_of_your_view' 

ActiveRecordはこのビューを通常のテーブルとして扱います。多分、実際のテーブルを持っているときほどパフォーマンスは良くないかもしれませんが、すべてをメモリにロードし、ソートし、改ページするよりもはるかに良いでしょう。

+0

私はこれについて考えましたが、列がモデル間で絶えず変化しているので、ビューを変更する必要があります – Himberjack

関連する問題