2010-07-26 2 views
3

У меня есть страница поиска, в которой находятся кандидаты. На этой странице вы можете нажать «Просмотр», чтобы найти дополнительную информацию о кандидате. Когда на представлении кандидата вы можете нажать «Изменить» или выполнить ряд других действий, которые также вернут вам представление кандидатов.Rails - сохранение поискового запроса/результата

Моя проблема в кандидате. Мне нужно добавить кнопку, чтобы вернуться к результатам поиска. Первоначально я думал об использовании кнопки JS с историей -1, но поскольку пользователь может делать другие действия изнутри представления, это не сработает.

Я по-прежнему новичок в рельсах, поэтому не уверен в своих возможностях ... Я думаю, что это какое-то кэширование результатов, а затем, возможно, скрытое поле для отслеживания местоположения кеша (не думайте это лучшее решение, как отслеживание скрытой стоимости может получить ABIT грязными!)

Спасибо, Алекс

+0

Спасибо всем за помощь !Я пойду по каждому из этих решений. – Alex

ответ

10

Я бы, вероятно, использовал переменную сеанса для хранения этой информации.

Во-первых, убедитесь, что ваша форма, которую размещают на странице поиска, является операцией GET, таким образом, данные поиска находятся в строке запроса. Затем в поисковой действии, вы можете захватить запрос URL и сохранить его в сессии:

session[:search_results] = request.url 

Теперь на ваш взгляд, для результатов, вы можете сделать свой «Назад к результатам поиска», как это:

link_to "Back to search results", session[:search_results] 
+0

Я предпочитаю это, у него есть только один недостаток: он не разрешит несколько сеансов поиска ... – hurikhan77

+1

BTW: Я предпочитаю «session [: last_query] = params» в качестве фильтра after. Затем он также может сохранять сообщения. Обязательно не делайте этого при перенаправлении, сохраняйте параметры только тогда, когда на самом деле ваш контроллер будет отображать результаты. – hurikhan77

2

Вы можете включить параметры запроса на субстранице. Например: /foo/search?q=stuff отображает результаты поиска. Каждый результат затем имеет ссылку, такую ​​как /foo/:id?q=stuff. А на подстранице у вас будет доступный параметр для ссылки на главную страницу.

Это решение не использует какое-либо состояние на стороне сервера, которое обычно считается лучшим способом создания веб-приложений. Это не только означает, что браузер будет вести себя так, как ожидалось, в отношении закладок, нескольких вкладок и т. Д., Но также гарантирует, что можно использовать надлежащее кэширование. Кроме того, это снижает сложность вашего приложения, что упрощает его отладку и расширение.

1

Вы можете поместить результаты поиска в таблицу «search_results» с помощью идентификатора пользователя. Затем, когда пользователь попадает на страницу, всегда загружайте запрос из этой таблицы.

2

У вас есть несколько вариантов:

кэшировать результаты, как вы предложили. Потенциальным недостатком этого является то, что он требует памяти, и если новые достоверные записи будут добавлены, вы их не увидите. Вы можете хранить кеш в сеансе или в базе данных (хотя в последнем случае вы мало выигрываете).

Я бы предложил просто запомнить последний поисковый запрос, либо в сеансе, либо используя скрытые поля. В результате вы снова запускаете запрос при переходе на страницу результатов поиска, но в правильно проиндексированной БД это не должно быть большой проблемой.

Удачи вам!

+2

Нет, не пытайтесь кэшировать результат в сеансе. В самом деле. Не надо! – hurikhan77

0

Если кто-то приходит на эту страницу, и вы должны кнопку, которая восходит к предыдущей странице и до сих пор отображения этих результатов поиска (так же, как кнопка Google Chrome), просто используйте: обратно .....

<%= link_to(image_tag("back.svg"), :back, :class => 'back_btn') %>