我正在使用Ruby on Rails應用程序,該應用程序已使用pg_search和模型上的其他兩個字段進行文本搜索。該邏輯根據搜索結果創建一個「數組」行。我不記得這個的實際名稱,因爲從技術上講,這不是一個數組。它是選定行的實例變量。我想從兩個附加模型中添加搜索條件。我的數據庫是PostgreSQL。如何在Ruby on Rails中使用三個表的聯接?
下面是三個模型定義的一個子集:
MediaLibrary:姓名,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正在搜索來自Target模型( ID,名稱))
我在想,如果主題和目標都與其他三個搜索條件一起搜索,我應該可以做這樣的事情。我還需要在我的結果中有topic_id和target_id,這樣我才能在我的視圖中顯示Topic.name和Target.name。
@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和堆棧溢出,但沒有發現任何加入上被人回答了Rails的使用Ruby三個表。
謝恩,非常感謝。我花了一段時間來編寫所有條件。我還爲media_targets和media_topics中的字段添加了索引。我仍在測試所有的條件,並發現了一些我需要修改的地方。這正是我需要的! – 2013-02-20 12:06:27