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

时间:2015-07-06 22:27:43

标签: ruby-on-rails ruby ruby-on-rails-4 search devise

目前我正在尝试在项目中创建搜索,以根据用户的区域调出用户。根据我的理解,我基本上需要将搜索参数放在控制器中,将self.search方法放在模型中,然后放在视图中的表单中。

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

模型(user.rb):

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

Controller(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 %>

如果您对我有任何帮助,请告诉我=)任何其他解释将非常感谢帮助我理解,谢谢!

编辑:我知道我需要输入结果部分,但我对如何/放置它感到困惑。

2 个答案:

答案 0 :(得分:1)

解答:

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

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

神奇=)

答案 1 :(得分:0)

可能会有所帮助的两件小事:

1)在您的搜索模型中,我认为您的search方法中存在拼写错误。它应如下所示:

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

您可能还想为您的参数考虑更多描述名称,例如state

2)在您的表单中,您不需要在任何地方明确地写params[:search]。将在控制器中为您生成params哈希,其中text_field的名称为键,用户输入的值为值(请参阅Ruby docs 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