抱歉英语不好:)
我在我的应用程序中遇到了问题。我希望通过帖子标题,帖子文本及其标签实现帖子搜索,我有一个搜索表单,我想要在标题或文本或标签中显示包含此单词的所有帖子,但现在它的工作方式不同,例如,我有2个帖子:
其中一个在标题中包含“hello”一词,另一个包含“hello”标记,
我想要显示这两个帖子,但现在只显示带有标签的那个帖子,而忽略标题中第二个带有“hello”的帖子,我不知道为什么。我知道我的Post.search
方法存在问题。
请帮助我,提前谢谢!
这是我的代码:
Post.rb:
class Post < ApplicationRecord
mount_uploader :image, ImageUploader
validates :body, presence: true, length: { maximum: 500}
validates :title, presence: true, length: { maximum: 50}
validates :adress, length: { maximum: 50}
belongs_to :user
has_many :taggings
has_many :tags, through: :taggings
has_many :comments, dependent: :destroy
has_many :favorites, dependent: :destroy
def self.search(keywords)
if keywords
joins(:tags).where("lower (title) ILIKE :value OR
lower (body) ILIKE :value OR
lower (tags.name) ILIKE :value",
value: "%#{keywords.downcase}%")
else
all.order("created_at DESC")
end
end
end
帖子控制器索引操作:
def index
@posts = Post.search(params[:keywords]).uniq
end
答案 0 :(得分:1)
尝试以下
选项一
.skills_selector {
position: relative;
}
.skills_selector a {
position: absolute;
top: 0;
left: 25px;
transform: translateY(-50%);
}
或类似的东西直接指向您的控制器索引操作
选项二
Post.includes(:tags).where("lower (posts.title) ILIKE :value OR
lower (posts.body) ILIKE :value OR
lower (tags.name) LIKE :value",
value: "%#{params[:keywords].downcase}%" ).references(:tags)
选项三
def index
if params[:keywords].present?
@posts = Post.includes(:tags).where("lower (posts.title) ILIKE :value OR
lower (posts.body) ILIKE :value OR
lower (tags.name) LIKE :value",
value: "%#{params[:keywords].downcase}%" ).references(:tags)
else
@posts = Post.all.order(created_at: :DESC)
end
end
对于comlex搜索,您可以查看RailsCast
pg_search
教程
希望它有所帮助。
答案 1 :(得分:0)
我认为这是因为“加入”。现在你有了“内连接”,当它在“标签”表中找到一行时,它会从结果中删除其余部分。所以你需要右/左连接。