概括
编辑:经过一些调试,当我在任何非关联视图(即除 /search 之外的任何视图)上时,似乎甚至没有调用我的搜索方法。这可能就是为什么我的重定向都不起作用的原因;它没有被调用。现在我需要弄清楚为什么。
我正在使用 Sphinx 对我的 Rails 应用程序进行全文搜索。总之,在我的 application.html.erb 布局视图中有一个标题,其中有一个搜索栏。我可以使用该搜索栏在给定页面上成功搜索(例如,我可以转到 localhost:3000/search 并且搜索有效),但我不知道如何做到这一点,以便当用户从任何页面,它们都会被定向到包含结果的搜索页面。
正如您从下面的代码中看到的那样,我尝试了几种重定向方式:我已经在我的搜索方法中放置了一个 redirect_to 并且我已经尝试将它放在 response_to 部分中。
问题
如何更改我的代码,以便任何页面上的用户可以在标题中输入搜索词并始终将其结果定向到搜索页面 (localhost:3000/search)?
代码
我所有的代码都在这里: https ://github.com/leesharma/SearchingSandbox
一些关键部分:
路线.rb:
Blog::Application.routes.draw do
get '/search', :to => 'search#search'
resources :users, :posts
root :to => 'posts#index'
end
rake routes
(从终端)
search GET /search(.:format) search#search
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
root / posts#index
摘自 shared/_header.html.erb:
<div class="small-8 columns">
<%= form_tag :controller => 'search', :action => 'search', :method => 'get', :authenticity_token => false do %>
<%= text_field_tag :search, params[:search] %>
</div>
<div class="small-4 columns">
<%= submit_tag "Search", :name => nil, :class => "button prefix" %>
<% end %>
</div>
search_controller.rb
class SearchController < ApplicationController
def search
@posts = Post.search params[:search]
@users = User.search params[:search]
respond_to do |format|
format.html # search.html.erb
format.json { render json: search_path }
end
end
end
search.html.erb:
<h1>Search Results</h1>
<h2>Listing posts</h2>
<% if @posts %>
<table>
<tr>
<th>Title</th>
<th>Description</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.description.first(500) %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<% else %>
No posts matching your query
<% end %>
<h2>Listing users</h2>
<% if false %> <!-- Leaving this out for now -->
<table>
<tr>
<th>First</th>
<th>Last</th>
<th>Tagline</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @users.each do |user| %>
<tr>
<td><%= user.first %></td>
<td><%= user.last %></td>
<td><%= user.tagline %></td>
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<% else %>
No users matching your query
<% end %>