0

Rails(2.3.9ですが、この問題が3.0.3にも存在することを確認しました)アプリケーションの検索フォームを作成しています。問題は、Railsがユーザー入力から引用符を削除していることです。私はユーザーに書く可能性を与えたいと思います:

  • "ruby on rails":これは全文で文字列全体を検索します
  • ruby on rails:これはこれら3つの単語すべてを含む記事を検索します

しかし、どちらの場合も私のコントローラーでは、1つの文字列しか取得していません。

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"=>""}}
4

3 に答える 3

4

Rack 1.1 のバグのようです: http://thewebfellas.com/blog/2010/7/15/rails-2-3-8-rack-1-1-and-the-curious-case-of-the-欠落している引用符

于 2010-12-15T12:38:21.493 に答える
0

フォームからのすべてのパラメーターは文字列としてコントローラーに到着し、Rails はアクティブレコードを介してデータベースに値を推測するため、データベースの整数列に「5」を送信すると、それを 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"]
于 2010-11-23T11:42:31.317 に答える
0

私のRails 2.3.5では再現できません。引用符を取り除いているのはブラウザではありませんか? また、検索フォームに POST を使用した場合も発生しますか?

于 2010-11-23T11:54:30.007 に答える