如何让搜索框在Ruby on Rails中使用SQLITE显示正确的标准?

时间:2016-12-06 05:20:01

标签: ruby-on-rails ruby ruby-on-rails-4 sqlite

我在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

当我输入搜索字词时,它会显示我的所有表格信息,而不仅仅是我搜索的信息。关于如何让它只显示我搜索的数据的任何想法?

2 个答案:

答案 0 :(得分:0)

为什么你没有使用Gem在rails中搜索?最好的选择之一是https://github.com/ankane/searchkick(使用Rails和Elasticsearch轻松实现智能搜索)。 Searchkick会了解您的用户正在寻找什么。随着越来越多的人搜索,它变得越来越聪明,结果越来越好。它对开发人员友好 - 对您的用户来说很神奇。

答案 1 :(得分:0)

我弄清楚我做错了什么。我更新了错误的控制器。我更新了我的文章控制器,而不是欢迎控制器,它工作。