我的搜索功能不显示 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
我已经在我的 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