Ruby on rails 未定义的方法`搜索';为了思考斯芬克斯

Ruby on rails 未定义的方法`搜索';为了思考斯芬克斯,ruby-on-rails,thinking-sphinx,Ruby On Rails,Thinking Sphinx,我正在尝试将斯芬克斯思维与高级搜索表单结合起来。我被困在如何设置控制器和模型中的操作,以便它可以显示结果。当我从主页搜索某个内容时,我得到一个指向搜索控制器的未定义方法“search”错误: class SearchesController < ApplicationController def new @search = Search.new end def create @search = Search.new(params[:search]) i

我正在尝试将斯芬克斯思维与高级搜索表单结合起来。我被困在如何设置控制器和模型中的操作,以便它可以显示结果。当我从主页搜索某个内容时,我得到一个指向搜索控制器的未定义方法“search”错误:

class SearchesController < ApplicationController
  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
       @users = User.search(params[:search])
     end


end
User.search(params[:search])
def索引 @users=User.search(参数[:search]) 结束

我只使用用户模型,因为我希望能够搜索我的用户配置文件,如他们的年龄、性别、种族、关于我的部分等

搜索控制器:

class SearchesController < ApplicationController
  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
       @users = User.search(params[:search])
     end


end
User.search(params[:search])
搜索表格:

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

<P><%= link_to "Advanced Search", new_search_path %><p>



在我努力学习TS是如何工作的过程中,只要有一点方向正确,我将不胜感激。这似乎并不太难,但不知怎么的,我很难把握它。

< P>请考虑以下内容:

Class Foo
  def self.a_class_method
  end

  def an_instance_method
  end
end

Foo.a_class_method
Foo.new.an_instance_method
您现在可以理解,这是没有意义的:

def search
  @search_users = User.search(params[:search])
end
此外,
params
将无法在您的模型中访问。您需要通过参数传递它

我对狮身人面像不太熟悉,但你现在可能可以让它工作了

您的问题是需要为
用户
模型定义一个类
搜索
方法来执行搜索:

class User
  def self.search(criteria)
    # do the search here base on the criteria
  end
end
在控制器中:

class SearchesController < ApplicationController
  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
       @users = User.search(params[:search])
     end


end
User.search(params[:search])

对于TS 3,我认为您不需要向模型添加任何内容,因为索引来自/index。我从模型中删除了def搜索,并将def索引更改为@users=params[:query]。空白?User.all:User.search(params[:query])。现在,这不会给我任何错误,但在执行搜索词时,它总是显示所有用户。例如,我搜索了“亚洲人”,它拉了5个用户,而它本应只显示具有该种族的用户。