2011-02-03 4 views
1

Когда пользователь заходит на мой сайт на iPhone я хочу представить их на страницу с 2-мя вариантами:Append Строка запроса request.request_uri, не зная, есть ли строка запроса

1) Пойти получить наше приложение или 2) Продолжить запрос по запрошенному адресу

Я делаю это путем проверки агента пользователя в контроллере приложения и визуализации представления.

Чтобы вариант 2 работал правильно в этом представлении, я хочу, чтобы ссылка сохраняла исходный URL-адрес и добавляла параметр строки запроса fullsite = 1. Я ищу этот параметр параметра строки запроса в файле before_filter в своем контроллере приложений и устанавливаю файл cookie, чтобы пользователь не запрашивал его снова.

Каков самый чистый способ добавить параметр строки запроса в request.request_uri, зная, что этот URL-адрес запроса может иметь или не иметь строку запроса для начала? Я знаю, что прямо проверять, были ли у параметра параметры, но мне интересно, есть ли помощник для добавления параметра в любом случае (без параметров или с существующими параметрами) без оценки самих вещей. Ищите правильный «железнодорожный» способ сделать это.

ответ

2

Возможно, лучший способ сделать это - добавить флаг в хэш-код params, который уже будет иметь всю другую информацию, необходимую для создания этой ссылки (предполагая, что вы поймаете iPhone и выполните рендеринг в before_filter), а затем выполните сборку Ваша ссылка из модифицированного Params хэша:

в вашем before_filter:

params[:fullsite] = 1 

И тогда, на ваш взгляд:

<%= link_to('Continue to the Full Site', params) %> 

Таким образом, Rails получает всю грязную работу по экранированию и добавлению строк запроса - как :fullsite, так и независимо от исходной строки запроса.

Если вы используете только :fullsite как способ избежать перенаправления айфонов через iPhone портал несколько раз, хотя, похоже, ни один из этих подходов будет работать лучше:

  1. Установите :fulltext в сессии вместо , или
  2. Только перенаправить пользователей, если они находятся на iPhone. И request.referer - это нечто иное, чем ваш сайт.

Надеюсь, это поможет!

+0

Хорошее предложение просто добавить к параметру hash в before_filter. Я хочу, чтобы выбор продолжался дольше, чем просто сеанс, но ваши предложенные подходы имеют смысл. Благодаря! – Nick

+0

@ Nick Glad Я могу помочь! –

Смежные вопросы