簡體   English   中英

如何使用搜索功能可標記

[英]How to use the search in acts as taggable

我正在使用可標記的寶石。

我想在單個搜索字段中同時使用名稱和標簽進行搜索

我的模特

class User < ActiveRecord::Base

  acts_as_taggable
  attr_accessor: :name, :age, :country, tag_list

  def self.search(search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end
end

控制者

class UserAppsController < ApplicationController

  def index
    @users = User.search(params[:search])
    //@users = User.tagged_with(params[:search])
  end
end

幫我解決這個問題。

一種方法是使用+將兩個結果相加:

@users = User.search(params[:search])
@users = @users + User.tagged_with(params[:search])

更好的解決方案是更改模型中的搜索方法以返回完整結果:

where('name LIKE ?', "%#{search}%") + tagged_with(search)

但是,如果您想將名稱搜索與標記搜索分開,則可以將它們分成范圍或類似的范圍,然后使用它:

scope :name_contains, -> (query) { where('name LIKE ?', "%#{query}%") }

並在您的搜索方法中:

name_contains(search) + tagged_with(search)

順便說一句,如果您希望名稱搜索不區分大小寫,請使用以下命令:

scope :name_contains, -> (query) { where("REPLACE (lower(name), ' ', '' ) like ?", "%#{query.downcase}%") }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM