我想创建一个搜索框(表单),在提交时将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
这将允许用户使用搜索框按标题搜索文章。
答案 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中作为查询参数使用。因此,如果您想为搜索结果添加书签,那么就有可能。