在轨道上搜索红宝石中的多个模型

时间:2016-10-26 13:52:32

标签: ruby-on-rails ruby

我仍然是ruby on rails的初学者,我正在尝试为我正在开发的网站创建一个简单的搜索选项。

我有很多模特,比如杂货,咖喱和初学者。

如果我有一个模型,我的搜索工作正常,但如何搜索所有模型的标题或名称?

我在每个模型中添加了以下方法,并尝试在主页中显示结果。但没有运气!

def self.search(search)
where("LOWER(title) LIKE ?", "%#{search.downcase}%") 
#where("content LIKE ?", "%#{search}%")
end

有人可以帮我解决一下这个例子吗?

谢谢。

4 个答案:

答案 0 :(得分:3)

您可以将ActiveRecord_Relations一起添加,它将为您提供一个简单的数组

@results = Sundries.search(search_term) + Curry.search(search_term) + Starter.search(search_term)

在视图中......

<% @results.each do |result| %>
  <%= "#{result.title} part of our fine #{result.class.name} choices" %>
<% end %>

答案 1 :(得分:2)

有几种方法可以实现这一点。您可以使用ElasticSearch或Sphinx等高级搜索引擎。或者您可以使用(例如)pg_search gem,以防您使用Postgresql作为数据库。

您可以为每种方法找到RailsCasts(其中一些可能只适用于订阅者)。

一旦你学习了Rails,我建议你先尝试 pg_search ,避免使用搜索引擎。因为对于初学者来说有时候会很棘手。您可以在数据库中获得更多数据,或者您需要提高技能。首先尝试制作工作解决方案,然后进行改进。

答案 2 :(得分:0)

您可以使用此ransack来实现搜索功能。

在你的观点方面

<%= form_tag search_path, method: :get do %>
  <%= text_field_tag :q, nil %>
<%= end %>

并在您的控制器操作方法中

q = params[:q]
@sunderies = Sundries.search(title_cont: q).result
@curry = Curry.search(title_cont: q).result
@starter = Starter.search(title_cont: q).result
@total_results = @sunderies + @curry + @starter

答案 3 :(得分:0)

为想要在2019年以后关注此问题的任何人提供答案... scenic是您要使用的gem(只要您的数据库是postgres)。