2013-04-23 2 views
0

У меня есть приложение для рельсов, которое позволяет выполнять поиск сообщений при получении запроса в форме /posts/search/:searchstring. У меня нет проблем с функциональностью, когда я помещаю строку поиска в строку url моего браузера, но я застреваю, пытаясь создать форму поиска.рельсы параметризуют данные формы

Как я могу создать html-форму в рельсах, которая позволяет мне отправить запрос на получение, используя синтаксис выше? Я собираюсь застрять, используя метод контроллера для перенаправления? Я действительно хочу эту функцию, потому что я твердо верю, что URL является частью УБ, и я ненавижу уродливые URL, как это:

http://example.com/search?utf8=%E2%9C%93&q=searchstring&commit=Search 
+0

возможно дубликат [Рельсы маршруты, связанные с поисковой формой] (HTTP: // StackOverflow. com/questions/10064303/rails-routes-related-to-a-search-form) – slhck

ответ

1

Форма будет делать то, что будет делать форма, и если у вас есть форма с использованием GET, она будет сериализовать эти параметры в строке запроса.

Но так как вы : используя get, вам также действительно не нужно присылать форму. Скорее вы можете просто отправить браузер в URL.

Так, например, где-то в ваших JS:

function doSearch(form) { 
    // This assumes that the first input of your form is the search 
    // box. YMMV. 
    var query = encodeURIComponent(form.elements[0].value); 

    // just send the browser to the constructed URL 
    window.location = form.action + "/" + query; 

    // and return false to prevent the actual submit 
    return false; 
} 

Затем в HTML:

<form action = "/posts/search" onsubmit="return doSearch(this)"> 
    <input type="text" name="searchstring" /> 
    <input type="submit" /> 
</form> 
+0

Мне это нравится, но что делать, если в строке поиска есть пробелы и специальные символы? Как это будет обрабатываться? –

+0

Вот где входит encodeURIComponent. Он избежит таких символов. – numbers1311407

0

Как о добавлении форме так:

<form method="get" action="<%= search_posts_url_path %>">#text input here with name "searchstring"</form> 
Смежные вопросы