Ruby on Rails 4:在搜索结果页面上显示搜索结果

我目前正在项目中实现搜索function,我正在努力在专门的搜索结果页面上显示它。

已经意识到关于这个主题的问题,但由于完全无能而无法找到解决方案,我问你最后的指针:)。

搜索表单在索引页面上生成,该页面是entries_path和root_path。 我想将参数传递给新页面search_path。

这是我的文件:

EntriesController

def search end def index @entries = Entry.all.order('entries.created_at DESC') @entry = Entry.new # My index page also creates new entries. if params[:search] @entries = Entry.search(params[:search]).order("created_at DESC") else @entries = Entry.all.order("created_at DESC") end 

型号:entry.rb

 def self.search(search) where("content LIKE ? OR created_at LIKE ?", "%#{search}%", "%#{search}%") end 

的routes.rb

 Rails.application.routes.draw do resources :entries root 'entries#index' get 'new' => 'entries/new' get 'show' => 'entries/show' get 'edit' => 'entries/edit' get 'search' => 'entries/search' 

最后:关于索引的表格

  "get", class: "search-form") do %>   

当我将entries_path更改为search_path时,我收到了“我们很抱歉,但出了点问题。如果您是应用程序所有者,请查看日志以获取更多信息。” – 因此,我怀疑这是一个路由问题。 但是,我似乎无法弄明白。 日志说:

 ActionController::RoutingError (uninitialized constant Entries): 

P,很想知道这里发生了什么! 非常感谢一堆。

改变你的路线.rb

 Rails.application.routes.draw do root 'entries#index' resources :entries do collection do get :search end end end 

索引页面上更改search表单中的path

 <%= form_tag(search_entries_path, :method => :get, class: "search-form") do %> <%= text_field_tag :search, params[:search], placeholder: "Search for previous entries..", class: "form-control" %> <% end %> 

更改控制器的方法:

 def search if params[:search] @entries = Entry.search(params[:search]).order("created_at DESC") else @entries = Entry.all.order("created_at DESC") end end 

view/entries/search.html.erb下为搜索方法创建一个模板您可以在此处访问您的@entries对象


我所做的改变点:

1. routes.rb的变化:

Rails路由器识别URL并将它们分派给控制器的动作。 它还可以生成pathsURLs ,从而无需在视图中对字符串进行硬编码。 resource路由将许多相关请求映射到单个控制器中的操作 。 资源丰富的路由提供HTTP verbsURLs与控制器操作之间的映射。 按照惯例 ,每个操作还映射到数据库中的特定CRUD操作。 有关路线的更多信息

您可以添加适用于collection其他路径或collection individual members of the collection

对于Eg:

要添加成员路由 ,只需将成员块添加到资源块中:

 resources :entries do member do get 'preview' end end 

要添加到集合的路由:

 resources :entries do collection do get 'search' end end 

成员路由将需要ID ,因为它作用于member收集路径不是因为它作用于objects collection 。 有关收集路线和ruby在轨道上的成员路线之间的区别的更多信息?

2.我应该使用哪种方法进行搜索GETPOST

网上有关于GETPOST请求的post数量以及SO。 GETPOST都有自己的位置,如果你是Web开发人员,你应该了解每个人的优缺点 。 或者,如果你懒得这样做,请记住搜索表单应该使用GET方法 。 您的用户会很感激。 ;)

让我用简短的描述来定义它们。 GET获取资源(当你不想在数据库中进行任何更改时), POST来创建资源(当你想在数据库中进行更改/创建时), PUT (或PATCH ,这些是关于此事)更新资源, DELETE删除一个。

供你参考:

  • 你什么时候使用POST,什么时候使用GET?

我希望这些信息可以帮助你。 祝好运 :)

您可以在索引页面上使用html作为搜索字段。

 
Search

注意:此表单将触及条目控制器的索引操作,因此此时无需创建已创建的search methods