как да свия дълъг url за търсене в rails 3.2

Имам този URL адрес на контролера за търсене:

http://localhost:3000/search/index?utf8=✓&search=Search_terms

как мога да отрежа това до:

http://localhost:3000/search=query

кодът за търсене:

#search-box
  #search-form
    = form_tag search_index_path, :method => 'get'  do
      = text_field_tag :search, params[:search], :autocomplete => "off"
      %button#search-button{:type => "submit"}
        %span Go!

Или това е възможно??

Моля за съвет.


person The questioner    schedule 09.07.2012    source източник
comment
Моля, посетете stackoverflow.com/questions/11391686 /   -  person Soundar Rathinasamy    schedule 09.07.2012


Отговори (3)


Това не е възможно от самия Ruby (или Rails). Ти трябва да

  1. добавете обратно извикване на JavaScript към събитието за изпращане на формуляра
  2. валидирайте формата
  3. заменете целевия URL на формуляра с този, съставен от search= + входна стойност.

Имайте предвид, че не всички знаци могат да бъдат част от URL адрес. Това е причината, поради която трябва да подадете заявката за търсене като параметър, а не като част от URI.

person Simone Carletti    schedule 09.07.2012
comment
Да, сложно е. Просто оставям това непроменено. - person The questioner; 09.07.2012

Ако не искате да показвате params[search] на URL адреса, трябва да промените метода от GET на POST във вашия формуляр.

Прочетете го: http://www.cs.tut.fi/~jkorpela/forms/methods.html

или включете вашия код на формуляра във въпроса...

person gabrielhilal    schedule 09.07.2012
comment
Искам да покажа params[search], но не искам search/index?utf8=✓& - person The questioner; 09.07.2012
comment
Ако промените метода за публикуване, в URL адреса няма да се показва допълнителен аргумент и можете да използвате параметъра [търсене] във вашия контролер. - person gabrielhilal; 09.07.2012
comment
Кое действие е по-добро?? ПУБЛИКУВАЙТЕ или ВЗЕМЕТЕ? по отношение на стабилност, сигурност и натоварване на сървъра. - person The questioner; 09.07.2012
comment
вашият отговор е тук: stackoverflow.com/questions/195212/ - person gabrielhilal; 09.07.2012

Това е напълно възможно с (само) Rails.

Уверете се, че страницата, към която изпращате, е вашият основен път

(в config/routes.rb)

root :to => "search#index"

Тогава просто се уверете, че вашият формуляр се публикува в root_path

Да се ​​отървете от "снежния човек" е малко по-трудно. Ако сте сигурни, че няма да имате някой, който да изпраща знаци, различни от UTF8, тогава избягването на помощника form_tag и ръчното кодиране на вашия формуляр (лесно с такъв кратък формуляр) ще се отърве от него.

person mylescarrick    schedule 09.07.2012
comment
Според оригиналния пример, потребителят иска заявката в URL адреса (а не като параметър). Това не е възможно с (само) Rails. - person Simone Carletti; 09.07.2012
comment
Няма да бъде като наименуван параметър. Той просто ще бъде изпратен като ключ=стойност с всички параметри, заявени на тази страница - следователно root_path няма допълнителни параметри named (тъй като това е методът на индекса на RESTful контролер) - person mylescarrick; 09.07.2012