创建表单/搜索框以将搜索词传递到要与rails scope params一起使用的查询字符串

时间:2016-06-29 17:01:20

标签: ruby-on-rails

我想创建一个搜索框(表单),在提交时将search_word传递给查询字符串。

<%= link_to articles_path(title: "search_word") %>

class Article < Active Record::Base
  scope :title, -> (title) { where("title ILIKE ?", "%#{title}%")}
end

class ArticlesController < ApplicationController
  def index 
    @articles = Article.all
    @articles = @articles.title(params[:title]) if params[:title].present? 
  end
end

这将允许用户使用搜索框按标题搜索文章。

1 个答案:

答案 0 :(得分:3)

这里的想法是,您必须提供一个表单供用户输入数据并将其提交到您的应用。

在您看来,更改此内容:

<%= link_to articles_path(title: "search_word") %>

进入这种形式:

<%= form_tag articles_path, method: :get do %>
  <%= text_field_tag "title", params[:title], placeholder: "Search by title" %>
  <%= submit_tag "Search" %>
<% end %>

form_tag传递将处理搜索的控制器#action的路径。然后创建一个文本字段以允许用户键入搜索词 - 该值将通过params[:title]在您的控制器中提供。我们将文本字段params[:title]作为第二个参数,以便它显示用户可能输入的任何先前搜索词。placeholder:让用户知道将搜索文章的属性。最后,创建submit_tag以允许用户提交表单。

P.S Note表单属于GET类型,因此无论用户输入的值是什么,都可以在url中作为查询参数使用。因此,如果您想为搜索结果添加书签,那么就有可能。