form_tag,controller,action不重定向到posts / index

时间:2015-01-06 09:56:35

标签: ruby ruby-on-rails-4

这应该很容易,但我不确定为什么它不起作用。我在导航栏中有一个搜索表单。当我在posts / index中的导航栏中进行搜索时,我可以毫无问题地获得搜索结果。如下图所示:

http://localhost:3000/posts?utf8=✓&query=technology

但是,当我去帖子/显示并进行搜索时,搜索不会将我重定向到帖子/索引以提供结果。相反,我得到了以下内容。

http://localhost:3000/categories/history?utf8=✓&query=technology.

pry的输出。

[1] pry(#<CategoriesController>)> params
=> {"utf8"=>"✓", "query"=>"technology", "controller"=>"categories", "action"=>"show", "id"=>"history"}

代码如下:

查看/布局/ _navigation.html.erb

<%= form_tag({:controller => "posts", :action => "index"}, method: :get) do %>        
<div class="form-group">
  <%= text_field_tag :query, params[:query], class: "form-control", placeholder: "Search Here" %>
</div>
  <%= submit_tag "Search", name: nil, class: "btn btn-default" %>
<% end %> 

的routes.rb

resources :posts 
resources :categories

提前致谢。

更新1

1)从Safari检查元素添加图片 enter image description here

2)我也说错了#34; ...当我去帖子/表演和行为......&#34;它应该是&#34; ...当我去分类/表演和行为......&#34;

更新2

根据评论的要求,以下是一些需要考虑的其他信息。

查看/布局/ _navigation.html.erb

  <li>
  <form class="navbar-form navbar-left">
      <%= form_tag({:controller => "posts", :action => "index"}, method: :get) do %>        
    <div class="form-group">
      <%= text_field_tag :query, params[:query], class: "form-control", placeholder: "Search This Page" %>
    </div>
      <%= submit_tag "Search", name: nil, class: "btn btn-default" %>
    <% end %>        
  </form>
  </li> 

视图/类别/ show.html.erb

<div id="wrapper">
  <div id="columns">
    <% @category.each do |post| %>
      <%= render 'posts/post', post: post %>
    <% end %>
  </div>
</div>

<%= will_paginate @category %>

视图/帖/ show.html.erb

<div id="wrapper">
  <div id="columns">
    <% @posts.each do |post| %>
      <%= render 'post', post: post %>
    <% end %>
  </div>
</div>


<%= will_paginate @posts %>

另外,请在下面找到帖子/索引和类别/节目的其他截图。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

这是你的问题:

<form class="navbar-form navbar-left">
  <%= form_tag({:controller => "posts", :action => "index"}, method: :get) do

form_tag会为您生成<form>元素。现在您已经嵌套了表单元素,并且顶部的元素被认为是表单。移除<form class="navbar-form navbar-left">并添加到form_tag :class => 'navbar-form navbar-left'作为另一种选择。