Это моя задача
1) Создать новый маршрут localhost: 3000 / device
2) Подумайте, был ли этот URL получен с мобильных телефонов или настольных браузеров, тогда
3) Отслеживание системы / устройства (iOS, android, web), с которого был получен URL-адрес
4) В зависимости от устройства, с которого поступил запрос, нам нужно перенаправить на другой URL-адрес(например, iOS ——> «iOS app store», android ——> «Android play store», web ——> «страница Google»)
5) Узнайте, какие существуют различные подходы, доступные дляотслеживать систему, из которой поступил запрос, и что было бы лучше всего реализовать и почему?
Здесь я нашел решение, но в rspec оно вызывает ошибку.
Это мой маршрут
get :devise, to: 'topics#devise'
А это мой контроллер
class TopicsController < ApplicationController
def devise
if request.env['HTTP_USER_AGENT'].downcase.match(/mac/i)
redirect_to 'https://itunes.apple.com/us/app/apple-store/id375380948?mt=8'
elsif request.env['HTTP_USER_AGENT'].downcase.match(/windows/i)
redirect_to 'https://www.microsoft.com/en-in/store/apps/windows'
elsif request.env['HTTP_USER_AGENT'].downcase.match(/android/i)
redirect_to 'https://play.google.com/store?hl=en'
else
redirect_to root_path
end
end
end
Когда я нажимаю url lvh.me:3000/devise
, он перенаправляется в соответствующий магазин приложений.
Это моя спецификация контроллера
context 'devise' do
it 'should detect the device' do
get :devise
response.should redirect_to '/https://www.microsoft.com/en-in/store/apps/windows'
end
end
и это вызвало ошибку:
Ожидаемый ответбыть перенаправлением на http://test.host/https://www.microsoft.com/en-in/store/apps/windows, но было перенаправлением на http://test.host/.
Ожидается, что http://test.host/https://www.microsoft.com/en-in/store/apps/windows" будет === "http://test.host/".
Если я сделал это неправильно, скажите несколько советов для rspec