Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 4中按城市为用户生成搜索结果_Ruby On Rails_Ruby_Ruby On Rails 4_Search_Devise - Fatal编程技术网

Ruby on rails 在Rails 4中按城市为用户生成搜索结果

Ruby on rails 在Rails 4中按城市为用户生成搜索结果,ruby-on-rails,ruby,ruby-on-rails-4,search,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Search,Devise,目前,我正试图在一个项目中创建一个搜索,根据用户所在的地区来查找用户。据我所知,我基本上需要在控制器中放置搜索参数,在模型中放置self.search方法,然后在视图中放置表单 在另一个项目中,我有一个搜索,但它显示了上面的所有选项,并使用搜索筛选出不匹配的选项。对于这种情况,我不想在开始时列出任何用户。我想使用搜索栏并调出该视图页面中匹配的所有用户。此外,我还使用Desive for users,如果这确实起作用的话。以下是我的三个代码区域: 模型(user.rb): 控制器(welcome\

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

在另一个项目中,我有一个搜索,但它显示了上面的所有选项,并使用搜索筛选出不匹配的选项。对于这种情况,我不想在开始时列出任何用户。我想使用搜索栏并调出该视图页面中匹配的所有用户。此外,我还使用Desive for users,如果这确实起作用的话。以下是我的三个代码区域:

模型(user.rb):

控制器(welcome\u Controller.rb):

查看(find.html.erb):

“get”)do%>
零%>
请让我知道,如果你有任何知识为我帮助=)任何额外的解释将非常感谢,以帮助我理解,谢谢

编辑:我知道我需要输入结果部分,但我不知道如何/在哪里输入


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

1) 在您的搜索模型中,我相信您的
搜索方法中有一个输入错误。案文如下:

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

您可能还想为您的参数考虑更多的描述名称,例如<代码>状态> />代码>

2) 在表单中,不需要在任何地方显式编写
params[:search]
。参数散列将在控制器中为您生成,文本_字段的名称作为键,用户输入的值作为值(参见Ruby文档)。在这种情况下,使用
:search
作为文本\字段\标记名的名称

<%= form_tag(find_path, :method => "get") do %>
  <%= text_field_tag :search, placeholder: "Search Posts" %>
  <%= submit_tag "Search", :name => nil %>
<% end %>
“get”)do%>
零%>
有关FormHelpers的详细信息。

回答:

问题出在我的控制器上,因为我在搜索代码之前有一个render命令。控制器应为:

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.我没有搜索模型,这是在我的用户模型下进行的,因为我在搜索用户。我之所以喜欢而不是喜欢,是因为我在使用Postgress(我是),我可能需要改用ILIKE,但不确定这是否绝对正确。2:感谢您提供的资源,很高兴知道,但当我没有输入参数时,搜索字段中会出现“搜索”一词在它里面。不管这些,我仍然没有显示结果。你是对的-
ILIKE
不是打字错误;它提供了。在#2上,我应该更清楚。text\u field\u标记使用以下语法:
text\u field\u标记(name,value=nil,options={})
。在代码中,字段名为
:search
,值为
params[:search]
。不要使用
params[:search]
作为值。将值留空。Rails将使用字段名(:search)和用户输入的值传递
params[:search]=>“用户输入的任何内容”
发送到您的控制器。
def self.search(search)
  where("state LIKE ?", "%#{search}%")
end
<%= form_tag(find_path, :method => "get") do %>
  <%= text_field_tag :search, placeholder: "Search Posts" %>
  <%= submit_tag "Search", :name => nil %>
<% end %>
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