0

我一直在做 railscast 111 高级搜索表单。我应该能够输入可以在用户个人资料上找到的关键字,例如“没有孩子,亚洲人”,然后它应该在他们的个人资料上显示没有孩子的用户,亚洲人。如果我在搜索表单中输入“亚洲”,我会收到以下错误“找不到 id=asian 的搜索”。

我相信我知道混乱来自哪里。在高级搜索表单中,我有它,以便它根据 id 提取数据,例如每个种族都分配一个值 1-10(1 是亚洲人,因为它是第一次选择)。同样适用于其他选项,例如教育、性别等。但是对于在索引页面上找到的基本搜索表单,它不应该尝试从“ids”中提取。相反,它应该只允许我根据用户数据库中的信息(包含他们的所有个人资料信息)进行全文搜索。

错误指向搜索控制器中的行:

  def index
  @search = Search.find(params[:search])

很长一段时间以来,我一直在认真地尝试解决这个问题,但我无法解决这个问题。我尝试了很多不同的解决方案,但我似乎无法做到正确。如果有人可以帮助我指出正确的方向,将不胜感激!

搜索控制器:

  def new
    @search = Search.new
  end

  def create
    @search = Search.new(params[:search])
    if @search.save
      redirect_to @search
    else
      render 'new'
    end
  end

  def show
    @search = Search.find(params[:id])
    @users = @search.users
    end

    def index
       @search = Search.find(params[:search])
     end

end

搜索型号:

def users
    @users ||= find_users
  end

    private

  def find_users
    users = User.order(:id)
    users = users.where(gender: gender) if gender.present?
       users = users.where(zip_code: zip_code) if zip_code.present?
       users = users.where(children: children) if children.present?
       users = users.where(religion: religion) if religion.present?
       users = users.where(ethnicity: ethnicity) if ethnicity.present?
       users
  end
end

new.html(索引页搜索表单开启):

<%= form_tag searches_path, method: :get do %>
<p>
    <%= text_field_tag :search, params[:search] %>
    <%= button_tag "Search", name: nil %>
    </p>
<% end %>
4

1 回答 1

1

您基本上自己回答了这个问题:您需要全文搜索。通常用于此目的的是https://github.com/pat/thinking-sphinxhttp://sunspot.github.iohttp://pickyrb.comhttp://tenderlove.github.io/texticle(如果你使用 postgres)。

希望这可以帮助。

于 2013-06-29T17:50:07.313 回答