Ruby on rails 未定义的方法`搜索';为了思考斯芬克斯
我正在尝试将斯芬克斯思维与高级搜索表单结合起来。我被困在如何设置控制器和模型中的操作,以便它可以显示结果。当我从主页搜索某个内容时,我得到一个指向搜索控制器的未定义方法“search”错误: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
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个用户,而它本应只显示具有该种族的用户。