0

我正在使用作为可标记的宝石。

我想在单个搜索字段中同时使用名称和标签

我的模型

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

一种方法是使用 + 将两个结果相加:

@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 回答