rails 搜索表单 pg_search
rails search form with pg_search
在这里,我想为不同型号的用户提供一个搜索表单 Post
结果应该在不同的局部视图中看到。
搜索控制器就像
class SearchController < ApplicationController
def index
@users = User.search(params[:query])
@posts = Post.search(params[:query])
end
end
这样我就可以使用 partial 查看用户和帖子的结果
我用的是pg_search,所以模型是这样的
class User < ActiveRecord::Base
include PgSearch
pg_search_scope :search, :against => [:name]
end
class Post < ActiveRecord::Base
include PgSearch
pg_search_scope :search, :against => [:content]
end
我的问题是如何获得 :query 表单搜索表单?并将 :query 传递给搜索控制器?
<%= form_tag(XXXXX_path, method: "get") do %>
<%= text_field_tag :search, nil, placeholder: "Search ...", class: "form-control" %>
<%= submit_tag "", style: "display: none;" %>
<% end %>
XXXXX 是什么应该在上面的代码中使控制器得到:查询?因为我不想使用其他搜索模型
或者有没有其他方法可以使用搜索表单?
这取决于您希望 XXXXX
被调用的内容。我建议将其命名为 search_path
。您必须进行一些更改才能将 :query
传递给您的控制器。
在你的 routes.rb
文件中你可以有类似的东西(根据你的代码查看 link 额外的路由需求):
get '/search' => 'search#index'
在您看来,您将参数命名为 :search
,这没问题,但在您的控制器中,您必须引用 params[:search]
才能使其可用。
如果您希望调用参数 :query
,则必须更改 text_field_tag
以匹配。
在这里,我想为不同型号的用户提供一个搜索表单 Post
结果应该在不同的局部视图中看到。
搜索控制器就像
class SearchController < ApplicationController
def index
@users = User.search(params[:query])
@posts = Post.search(params[:query])
end
end
这样我就可以使用 partial 查看用户和帖子的结果
我用的是pg_search,所以模型是这样的
class User < ActiveRecord::Base
include PgSearch
pg_search_scope :search, :against => [:name]
end
class Post < ActiveRecord::Base
include PgSearch
pg_search_scope :search, :against => [:content]
end
我的问题是如何获得 :query 表单搜索表单?并将 :query 传递给搜索控制器?
<%= form_tag(XXXXX_path, method: "get") do %>
<%= text_field_tag :search, nil, placeholder: "Search ...", class: "form-control" %>
<%= submit_tag "", style: "display: none;" %>
<% end %>
XXXXX 是什么应该在上面的代码中使控制器得到:查询?因为我不想使用其他搜索模型
或者有没有其他方法可以使用搜索表单?
这取决于您希望 XXXXX
被调用的内容。我建议将其命名为 search_path
。您必须进行一些更改才能将 :query
传递给您的控制器。
在你的 routes.rb
文件中你可以有类似的东西(根据你的代码查看 link 额外的路由需求):
get '/search' => 'search#index'
在您看来,您将参数命名为 :search
,这没问题,但在您的控制器中,您必须引用 params[:search]
才能使其可用。
如果您希望调用参数 :query
,则必须更改 text_field_tag
以匹配。