我的搜索功能不显示 rails 中没有标签的帖子

My search feature isn't showing posts without a tag in rails

我已经在我的 rails 项目中实现了一个搜索功能,还有 ActsAsTaggableOn gem 所以我可以标记我的 Post 模型,但是当我使用我的搜索功能时它不显示没有标签的帖子,下面是我的代码:

搜索控制器

class SearchController < ApplicationController
    def search
      if params[:q].nil?
        @posts = []
      else
        @posts = Post.search params[:q]
      end
    end
end

Post型号

class Post < ActiveRecord::Base
    acts_as_taggable

    def self.search(search)
      joins(:tags)
      .where("title LIKE :search OR content LIKE :search OR tags.name LIKE :search", search: "%#{search}%")
    end
end

这是因为您在搜索查询中使用了联接。因此,它会生成一个 内部联接 ,这些联接期望相关数据存在于两个表中。因此,如果您没有任何标签,此代码将不会返回它。如果您需要标记和未标记的数据,那么您可以使用如下的 include 语句。

def self.search(search)
  includes(:tags)
  .where("title LIKE :search OR content LIKE :search OR tags.name LIKE :search", search: "%#{search}%")
end

您的代码生成带有 INNER JOIN 的查询,但您需要 LEFT JOIN,因此使用以下查询:

includes(:tags).references(:tags).where( # the remaining of your query

或者自己写一个连接语句:

joins("LEFT JOIN tags ON tags.id=...") # incomplete