我在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)
答案 0 :(得分:1)
我唯一可以建议的是控制器中可能有param
;也许@temp
是保留的变量名称?
我会立即尝试以下方法:
- 在控制器中,将变量发送到Rails控制台(以测试其存在)
- 尝试拨打
醇>@temp
其他内容
这就是我要做的事情:
#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控制器中的第一个方法。