params hash对控制器方法不可用,但在视图中可见

时间:2014-07-25 15:22:36

标签: ruby-on-rails twitter-bootstrap

我在Rails 4应用中使用Twitter Bootstrap的导航栏搜索框。我的表格如下:

<form class="navbar-form navbar-right" action="/search" method="get" role="search">
   <div class="form-group">
      <input type="text" class="form-control" placeholder="know what you want?" name="q">
   </div>
   <button type="submit" class="btn btn-default">find it!</button>
</form>

我的控制器方法:

def search
  @temp = params[:q]
end

我的观点:

<%= @temp %>

我的路线:

match '/search',      to: 'dynamic_pages#search',       via: 'get'

当我填写文本框并单击“提交”时,网址会发生变化,我可以看到查询字符串,如下所示:

http://localhost:3000/search?q=blah

麻烦的是,当在视图中显示它时,@ temp是一个空变量。

当我在视图中执行此操作时:

<%= params.inspect %>

我得到了param hash。

我很感激能得到的任何帮助。

编辑:从控制台输出

Started GET "/search?q=blah" for 127.0.0.1 at 2014-07-25 08:43:43 -0700
Processing by DynamicPagesController#search as HTML
  Parameters: {"q"=>"blah"}
  Rendered dynamic_pages/search.html.erb within layouts/application (0.1ms)
  Rendered layouts/_shim.html.erb (0.0ms)
  Rendered layouts/_header.html.erb (0.2ms)
  Rendered layouts/_footer.html.erb (0.1ms)
Completed 200 OK in 22ms (Views: 21.2ms | ActiveRecord: 0.0ms)

3 个答案:

答案 0 :(得分:1)

我唯一可以建议的是控制器中可能有param ;也许@temp是保留的变量名称?

我会立即尝试以下方法:

  
      
  1. 在控制器中,将变量发送到Rails控制台(以测试其存在)
  2.   
  3. 尝试拨打@temp其他内容
  4.   

这就是我要做的事情:

#app/controllers/dynamic_pages_controller.rb
Class DynamicPagesController < ApplicationController
   def search 
      Rails.logger.info(params.inspect())
      @query = params[:q]
   end
end

这应该在Rails日志中输出控制器中的参数 - 同时为您提供不同的变量名称。

答案 1 :(得分:0)

在Rails 4中,你必须允许你的参数。

http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

顺便说一句,您应该将路线语法更改为:

get "search" => "dynamic_pages#search"

答案 2 :(得分:0)

如果有人遇到这种情况,我通过移动搜索操作解决了问题,这是它是dynamic_pages控制器中的第一个方法。