Проблема с Rails, убирающим кавычки из формы ввода - PullRequest
0 голосов
/ 23 ноября 2010

Я пишу форму поиска для моего Rails (2.3.9, но я проверил, что эта проблема существует и в 3.0.3) приложения.Проблема в том, что Rails удаляет кавычки из пользовательского ввода.Я хотел бы дать пользователям возможность написать:

  • "ruby on rails": и это будет искать полный текст всей строки
  • ruby ​​на 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"=>""}}

Ответы [ 3 ]

4 голосов
/ 15 декабря 2010
0 голосов
/ 23 ноября 2010

Я не могу воспроизвести это в моих Rails 2.3.5.Вы уверены, что это не браузер, который убирает кавычки?Кроме того, это происходит, если вы используете POST для формы поиска?

0 голосов
/ 23 ноября 2010

все параметры из формы поступят в контроллер в виде строк, rails выводит значения в базу данных через activerecord, поэтому он знает, если вы отправите «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"]
...