0

私は、pg_searchとモデル上の他の2つのフィールドを使用したテキスト検索のロジックをすでに備えているRubyonRailsアプリケーションに取り組んでいます。ロジックは、検索結果から行の「配列」を作成します。技術的にはこれは配列ではないので、これの実際の名前は覚えていません。選択した行のインスタンス変数です。2つのモデルから検索条件を追加したいと思います。私のデータベースはPostgreSQLです。

3つのモデル定義すべてのサブセットを次に示します。

MediaLibrary:name、media_creator_id、media_type_id(現在の検索で使用されているフィールド。多くのmedia_topicsがあり、多くのmedia_targetsがあります)

MediaTopic:media_library_id、topic_id(topic_idを検索したい; media_libraryに属している;検索されているtopic_idはトピックモデル(id、name)から来ている)

MediaTarget:media_library_id、target_id(target_idを検索したい、media_libraryに属している、検索されているtarget_idはターゲットモデル(id、name)からのもの)

トピックとターゲットの両方が他の3つの検索条件と一緒に検索されている場合、私はこのようなことができるはずだと思っています。ビューにTopic.nameとTarget.nameを表示できるように、結果にtopic_idとtarget_idも含める必要があります。

@media_libraries = MediaLibrary.text_search(params[:query]).where("media_creator_id = ? AND media_type_id = ?", params[:media_creator_id].to_i, params[:media_type_id].to_i).joins(:media_topics.where("media_library_id = ? and topic_id = ?", id_from_media_library_row, params[:topic_id].to_i).joins(:media_targets.where("media_library_id = ? and target_id = ?", id_from_media_library_row, params[:target_id].to_i)

postgresql.orgとStackOverflowを検索しましたが、RubyonRailsを使用して3つのテーブルを結合しているものは見つかりませんでした。

4

1 に答える 1

0

SQL結合ステートメントをに渡すことができます#joins。あなたの場合はどうなるかわかりませんが、次のようなことができます。

@media_libraries = MediaLibrary.joins(%q(
  JOIN media_targets
    ON media_targets.media_library_id = media_libraries.id
  JOIN media_topics
    ON media_topics.media_library_id = media_libraries.id
)).text_search(params[:query])
  .where(
    media_libraries: {
      media_creator_id: params[:media_creator_id],
      media_type_id: params[:media_type_id]
    },
    media_topics: { id: params[:topic_id] },
  )
于 2013-02-18T23:42:06.230 に答える