按 Rails 中的城市为用户生成搜索结果 4

Generate search results for users by city in Rails 4

目前我正在尝试在项目中创建搜索以根据用户所在的地区来查找用户。据我了解,我基本上需要在控制器中放置搜索参数,在模型中放置 self.search 方法,然后在视图中放置表单。

在另一个项目中,我有一个搜索,但它显示了上面的所有选项,并使用搜索来过滤掉那些不匹配的选项。对于这种情况,我不想一开始就列出任何用户。我想使用搜索栏并显示在该视图页面中匹配的任何用户。此外,如果确实有所作为,我会为用户使用 Devise。这是我的三个代码区域:

型号(user.rb):

def self.search(search)
where("state ILIKE ?", "%#{search}%") 
end

控制器(welcome_controller.rb):

def index
    @users = User.all.order("created_at DESC")
    @newusers = User.all.order("created_at DESC").limit(5)
    @differentlocations = User.all.group_by(&:state).count
render :layout => 'with_newest_members'
if params[:search]
    @users = User.search(params[:search]).order("created_at DESC")
  else
    @users = User.all.order('created_at DESC')
  end
end

查看(find.html.erb):

<%= form_tag(find_path, :method => "get") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Posts" %>
<%= submit_tag "Search", :name => nil %>
<% end %>

如果您有任何知识可以帮助我,请告诉我=)任何额外的解释将不胜感激,以帮助我理解,谢谢!

编辑:我知道我需要输入结果部分,但我对 how/where 感到困惑。

两件可能有用的小事:

1) 在您的搜索模型中,我认为您的 search 方法中有错字。它应该如下所示:

def self.search(search)
  where("state LIKE ?", "%#{search}%")
end

您可能还想为您的参数考虑一个更具描述性的名称,例如 state.

2) 在您的表单中,您无需在任何地方显式写入 params[:search]。 params 哈希将在控制器中为您生成,以 text_field 的名称作为键,用户输入的值作为值(参见 Ruby 文档 here)。在这种情况下,使用 :search 作为 text_field_tag 名称的名称。

<%= form_tag(find_path, :method => "get") do %>
  <%= text_field_tag :search, placeholder: "Search Posts" %>
  <%= submit_tag "Search", :name => nil %>
<% end %>

有关 FormHelpers 的更多信息 here

答案:

问题出在我的控制器中,因为我在搜索代码之前有一个渲染命令。控制器应该是:

def index
@users = User.all.order("created_at DESC")
@newusers = User.all.order("created_at DESC").limit(5)
@differentlocations = User.all.group_by(&:state).count
if params[:search]
@users = User.search(params[:search]).order("created_at DESC")
 else
@users = User.all.order('created_at DESC')
end
render :layout => 'with_newest_members'
end

太棒了=)