我仍然是ruby on rails的初学者,我正在尝试为我正在开发的网站创建一个简单的搜索选项。
我有很多模特,比如杂货,咖喱和初学者。
如果我有一个模型,我的搜索工作正常,但如何搜索所有模型的标题或名称?
我在每个模型中添加了以下方法,并尝试在主页中显示结果。但没有运气!
def self.search(search)
where("LOWER(title) LIKE ?", "%#{search.downcase}%")
#where("content LIKE ?", "%#{search}%")
end
有人可以帮我解决一下这个例子吗?
谢谢。
答案 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)。