Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 3_Ruby On Rails_Search_Ransack - Fatal编程技术网

Ruby on rails 搜索,搜索多列,一个字段,rails 3

Ruby on rails 搜索,搜索多列,一个字段,rails 3,ruby-on-rails,search,ransack,Ruby On Rails,Search,Ransack,我是RubyonRails新手,我正在创建我的第一个站点。我的用户模型有三列:firstname、lastname和email。我用ransack做了一个搜索引擎,我想有一个搜索字段,它能遍历每一列并显示结果 我制作了一个用户\u控制器.rb如下: @q = User.search(params[:q]) @users = @q.result(:distinct => true) <%= search_form_for @search do |f| %> <div

我是RubyonRails新手,我正在创建我的第一个站点。我的用户模型有三列:
firstname
lastname
email
。我用ransack做了一个搜索引擎,我想有一个搜索字段,它能遍历每一列并显示结果

我制作了一个用户\u控制器.rb如下:

@q = User.search(params[:q])
@users = @q.result(:distinct => true)
<%= search_form_for @search do |f| %>
  <div class="field">
    <%= f.label :firstname_cont , "Firstname" %>
    <%= f.text_field :firstname_cont %>
    <%= f.label :lastname_cont , "Lastname" %>
    <%= f.text_field :lastname_cont %>
    <%= f.label :email_cont , "Email" %>
    <%= f.text_field :email_cont %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>
我的User\index.html.erb如下所示:

@q = User.search(params[:q])
@users = @q.result(:distinct => true)
<%= search_form_for @search do |f| %>
  <div class="field">
    <%= f.label :firstname_cont , "Firstname" %>
    <%= f.text_field :firstname_cont %>
    <%= f.label :lastname_cont , "Lastname" %>
    <%= f.text_field :lastname_cont %>
    <%= f.label :email_cont , "Email" %>
    <%= f.text_field :email_cont %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>

给我3个搜索字段,但我只想要一个通过名字,姓氏和电子邮件

编辑1: 在进一步测试之后,我发现搜索字段不能同时处理firstname和lastname,或者任何空格。我读到过这样一个helper_方法:

当我得到搜索结果时,我会被扔进我的模型索引等:user/index。我在哪里可以换这个


但是没有关于如何在视图中使用它的内容。为什么这么难做到这一点,这就是你要做的:在控制器中做这个->在模型中做这个->在视图中做这个->并且不要忘记像这样修正路由->

首先,在询问之前,试着在gem文档中搜索一点,并用谷歌搜索一点

首先要提到的是github页面:

在这里查看Ransack的演示页面:您应该看到第一个字段符合您的要求(在lastname和firsname中搜索),查看页面的源代码后,您应该会看到这一行

<input id="q_first_name_or_last_name_cont" name="q[first_name_or_last_name_cont]" size="30" type="text" />

这让您对要使用的正确谓词有了一个概念,您还可以在这里列出它们:(始终在github上的gem文档中)

基于这一点,你可以在你看来做类似的事情

<%= f.text_field :lastname_or_first_name_or_email_cont, :placeholder => 'full name or email contains' %>
”全名或电子邮件包含“%”
这将生成一个“或条件”查询,正如您在演示页面中再次看到的(其中生成的查询显示为传统SQL查询)

希望这有帮助


干杯

我能再请你帮忙吗?我注意到,空格或搜索超过1个单词会使此方法失败。比如,如果firstname是Foo,lastname是Bar,我搜索Foo-Bar,它就会失败。。是否可以生成:def set_full_name。。。。结束,然后在视图中调用它?在视图中如何称呼它?用你的方法?我没能做到这一点。。还有最后一件事,如果我搜索了任何其他地方,我的结果都会把我带到模型索引。这是为什么?嗨,雷米,我面对的是同一堵墙,关于在搜索字段中使用多个单词进行搜索,但目前没有找到任何答案。您可能可以使用搜索工具构建一个“虚拟列”进行搜索,这里有一个示例。问题的第二部分,结果总是将您抛到模型索引,因为在控制器的“搜索”操作中,您呈现“索引”视图。干杯,谢谢!我会仔细看看这个演示。我仍在自学RoR,并在网上搜寻信息。如果我想搜索姓氏(字符串)或id(整数)?@Leo-你为什么要搜索id?从用户角度来看,ID通常应保持不可见。。。。