Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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 在ruby on rails上组合两个搜索结果_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 在ruby on rails上组合两个搜索结果

Ruby on rails 在ruby on rails上组合两个搜索结果,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我试图有两个搜索字段,但最终合并了这两个结果。 在一个字段中,您可以搜索列表的位置,在另一个字段中,您可以搜索关键字,该关键字将查找列表的标题和描述。 输入位置和关键字时,应显示与位置和关键字匹配的列表。因此,如果我进入旧金山和零售,只有在SF上市,并有描述或标题零售应该弹出。 冯晨在一次询问中提出了以下建议: self.where("location like ? and (title like ? or description like ?)", query, query) 但是,这不会显

我试图有两个搜索字段,但最终合并了这两个结果。 在一个字段中,您可以搜索列表的位置,在另一个字段中,您可以搜索关键字,该关键字将查找列表的标题和描述。 输入位置和关键字时,应显示与位置和关键字匹配的列表。因此,如果我进入旧金山和零售,只有在SF上市,并有描述或标题零售应该弹出。 冯晨在一次询问中提出了以下建议:

self.where("location like ? and (title like ? or description like ?)", query, query)
但是,这不会显示同时匹配位置和关键字(标题、说明)的结果。 我需要改变我的观点或其他地方吗

下面是我在listing.rb中看到的内容

def self.locsearch(search)
  query = "%#{search}%"
  if search
    self.where("location like ? and (title like ? or description like ?)", query, query)
  else
    self.all
  end
end
结束

静态页面控制器.rb

def home
@listings = @listings.locsearch(params[:search]) if params[:search].present?
home.html.erb

<%= form_tag findjobs_path, :controller => 'listings', :action => 'locsearch', :method => 'get' do %>
<p>
  <%= text_field_tag :search, "location"  %>
  <%= text_field_tag :search, "keyword"  %>
  <%= submit_tag "search" %>
</p>
</div>
<% end %>
'listings',:action=>'locsearch',:method=>'get'do%>


在列表模型中需要一个descsearch方法,您需要这样做

# Right now you have @listings = @listings.locsearch(...)
# You need @listings = Listing.locsearch(...)
@listings = Listing.locsearch(params[:search][:location], params[:search][:keyword])
在您的列表模型中

def self.locsearch(location, keyword)
  location = "%#{location}%"
  keyword = "%#{keyword}%"
  if !location.bllank? && !keyword.blank?
    self.where("location like ? and (title like ? or description like ?)", location, keyword)
  else
    self.all
  end
end

结束

如果您使用的是postgres数据库,您可以尝试使用全文搜索功能执行上述操作。有一个gempg_搜索,可以让你很容易做到这一点。所产生的开销将是微不足道的,并且将为您提供更大的灵活性来解决这个搜索问题以及以后可能需要解决的任何此类问题

你的搜索方法在哪里?是的,对不起,我原来有一个搜索方法,但我被告知我只需要一个搜索方法。我在上面编辑了我的代码,看到了我答案中的注释。嘿,尼克,当我更改它时,它会过滤标题和描述,但不会过滤位置。所以我在旧金山零售。我在旧金山和芝加哥都有零售商品的清单。丽卡,请看我答案中的变化。基本上,您应该为搜索功能分离关键字和位置。希望对您有所帮助。对于nil:NilClass highlighting@listings=Listing.locsearch(params[:search][:location],params[:search][:keyword],我得到了一个未定义的错误方法“[]”