我正在为我的Rails编写一个搜索表单(2.3.9但我已经检查过这个问题也存在于3.0.3)应用程序。 问题是Rails正在从用户输入中删除引号。 我想给用户写信的可能性:
但在我的控制器中,对于这两种情况,我只得到一个字符串:
Processing NewsController#index (for 127.0.0.1 at 2010-11-23 10:23:15) [GET]
Parameters: {"action"=>"index", "controller"=>"news", "search"=>{"category"=>"", "news_agency"=>"", "fullsearch"=>"ruby on rails", "order"=>""}}
有没有选项可以跳过这个剥离引号?
注: 当用户为搜索字符串的两侧添加空格时,例如: '“ruby on rails”'字符串将被正确发送:
Processing NewsController#index (for 127.0.0.1 at 2010-11-23 10:23:15) [GET]
Parameters: {"action"=>"index", "controller"=>"news", "search"=>{"category"=>"", "news_agency"=>"", "fullsearch"=>" \"ruby on rails\" ", "order"=>""}}
答案 0 :(得分:4)
似乎是Rack 1.1错误:http://thewebfellas.com/blog/2010/7/15/rails-2-3-8-rack-1-1-and-the-curious-case-of-the-missing-quotes
答案 1 :(得分:0)
表单中的所有参数将作为字符串到达控制器,rails通过activerecord将值推送到数据库,因此它知道是否将“5”发送到db中的整数列,它应该将其更改为5。但对于搜索字符串,你需要做一些自己的魔法。像这样:
irb(main):001:0> "ruby on rails".split(" ")
=> ["ruby", "on", "rails"]
提供一系列搜索字词来搜索每个单独的字词。
irb(main):006:0> terms
=> ["ruby", "on", "rails"]
irb(main):013:0> terms.each do |term|
irb(main):014:1* puts "this sentence on rails".match(term)
irb(main):015:1> end
nil
on
rails
=> ["ruby", "on", "rails"]
答案 2 :(得分:0)
我无法在我的Rails 2.3.5中重现它。你确定它不是剥离引号的浏览器吗?此外,如果您在搜索表单中使用POST,是否会发生这种情况?