我在index.html上创建了一个搜索框,但它显示了所有数据库信息,而不是仅显示搜索到的信息。关于如何使其正常工作的任何想法?
这是我的...... 我有一个名为Article的模型。我在名为articles的控制器上设置了一个表单。在文章表中,我创建了列calibertitle,bullet,coal,caselength,powder和text。因此,表单会抓取数据并将它们放入这些列中。
我在articles_controller.rb
中一直在articles / index.html上显示这些信息 def index
@articles = Article.all
end
我决定要创建一个搜索框,任何人都可以输入关键字,如果与数据库匹配,则会显示该特定信息。例如,我在“calibertitle”字段下列出了“.308”,“9mm”等。因此,如果一个成员输入我的数据库中的一个口径,它将只显示该口径的信息。
我有一个名为welcome_controller.rb的第二个控制器,它与我的页面的主索引相关联。例如www.website.com/index.html
我已将搜索框放在此页面上。 这是我的/app/views/welcome/index.html.erb
<%= form_tag(articles_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Calibers" %>
<%= submit_tag "Search", :name => nil %>
<% end %>
我已将此放在我的app / models / article.rb
中class Article < ApplicationRecord
validates :calibertitle, presence: true,
length: { minimum: 3 }
def self.search(search)
where("calibertitle LIKE ? OR bullet LIKE ? OR powder LIKE ?", "%#{search}%", "%#{search}%", "%#{search}$
end
end
^^这对SQLITE是否正确? 我也不确定这样的东西是否会起作用?...
where('calibertitle LIKE ?', "%#{params[:calibertitle]}%")
这是我的app / controllers / welcome_controllers.rb ...
class WelcomeController < ApplicationController
def index
@articles = Article.all
if params[:search]
@articles = Article.search(params[:search]).order("created_at DESC")
else
@articles = Article.all.order("created_at DESC")
end
end
end
当我输入搜索字词时,它会显示我的所有表格信息,而不仅仅是我搜索的信息。关于如何让它只显示我搜索的数据的任何想法?
答案 0 :(得分:0)
为什么你没有使用Gem在rails中搜索?最好的选择之一是https://github.com/ankane/searchkick(使用Rails和Elasticsearch轻松实现智能搜索)。 Searchkick会了解您的用户正在寻找什么。随着越来越多的人搜索,它变得越来越聪明,结果越来越好。它对开发人员友好 - 对您的用户来说很神奇。
答案 1 :(得分:0)
我弄清楚我做错了什么。我更新了错误的控制器。我更新了我的文章控制器,而不是欢迎控制器,它工作。