我正在开发一个 Ruby on Rails 应用程序,该应用程序已经具有使用 pg_search 和模型上的其他两个字段进行文本搜索的逻辑。该逻辑从搜索结果创建一个“数组”行。我不记得它的实际名称,因为从技术上讲这不是一个数组。它是选定行的实例变量。我想从另外两个模型中添加搜索条件。我的数据库是 PostgreSQL。
这是所有三个模型定义的子集:
MediaLibrary:名称、media_creator_id、media_type_id(当前搜索中使用的字段;有很多 media_topics 和很多 media_targets)
MediaTopic:media_library_id,topic_id(要搜索topic_id;属于media_library;正在搜索的topic_id来自一个Topic模型(id,name))
MediaTarget:media_library_id,target_id(要搜索target_id;属于media_library;正在搜索的target_id来自一个Target模型(id,name))
我想如果主题和目标都与其他三个搜索条件一起被搜索,我应该能够做这样的事情。我还需要在结果中包含 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 和 Stack Overflow 上进行了搜索,但没有发现任何人都回答了使用 Ruby on Rails 连接三个表的任何内容。