0

私はacts-as-taggable-on gemを使用しています。

単一の検索フィールドで名前とタグの両方を検索したい

私のモデル

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

これを解決するのを手伝ってください。

4

1 に答える 1

1

1 つの方法は、 + を使用して両方の結果を追加することです。

@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}%") }
于 2015-10-15T10:08:41.180 に答える