0

Я использую mobile_detection в приложении rails 3, чтобы обслуживать отдельные страницы для мобильных пользователей. Я делаю свое тестирование через пользовательский агент в Safari. Проблема заключается в одном из моих процессов, rails отправляет другой URL-адрес в строку URL-адреса веб-браузера, чем на странице, которую он загружает. Поэтому, если я обновляю страницу, она пытается перейти к неправильному URL-адресу, который он помещает в веб-панель.Rails - отображаемый URL-адрес отличается от загрузки страницы

Вот этот процесс.

  1. Пользователь подает заявку на участие.
  2. Контроллер участия сохраняет запись, а затем отображает либо мобильную, либо html-версию Team # Candidate.

Вот журнал сервера для процесса с некоторыми из исключенных деталей.

Started POST "/participations" for 127.0.0.1 at 2013-07-20 00:14:37 -0400 
    Processing by ParticipationsController#create as HTML 
    ...Commits to DB 
    Redirected to http://localhost:3000/teams/57/candidate 
    Started GET "/teams/57/candidate" for 127.0.0.1 at 2013-07-20 00:14:37 -0400 
    Processing by TeamsController#candidate as HTML 
    Rendered teams/candidate.mobile.erb within layouts/application (34.9ms) 

Когда я запускаю тот же процесс с рабочего стола, ошибка не возникает. Как летом проблема:

  1. Rails загружает команды/сайт кандидата.mobile.erb.
  2. Однако URL бар после загрузки страницы дисплеев/участия

Это не происходит с рабочим стола.

Ниже приведен список участников. Он имеет несколько сложную логику, но по сути он обнаруживает, что запись уже создана, и делает что-то другое для этого случая, а также для мобильного.

Защиту создать @participation = Participation.new (Params [: участие]) @team = @ participation.team

respond_to do |format| 
    if @participation.save 
     if mobile_device? 
      format.mobile {redirect_to candidate_team_path(@team), notice: 'You have joined the team!'} 
     else 
      format.html { redirect_to candidate_team_path(@team), notice: 'You have successfully joined the team.' } 
     end   
    else 
     if @participation.team_id.nil? 
      format.mobile { redirect_to :back, notice: 'No team was joined.' } 
      format.html { redirect_to :back, notice: 'No team was joined.' } 
      format.json { render json: @participation.errors, status: :unprocessable_entity } 
     else 
      if mobile_device? 
       format.mobile {redirect_to candidate_team_path(@team), notice: 'Welcome back.'} 
      else 
       format.html {redirect_to candidate_team_path(@team), notice: 'Welcome back.'} 
      end 
     end 
    end 
end 

конец

ответ

0

@Heikki для большого решения.

Надеюсь, это полезно для других. Решение заключалось в том, чтобы вручную установить URL-адрес в макете. Учитывая, что JQM использует кеширование страниц и загружает страницы внутри/снаружи, это необходимо для определенных загрузок страниц.

Это можно поставить в application.mobile.erb

<div data-role="page" data-url="<% request.fullpath %> " 

Дополнительная ссылка: Error with Redirects in JQuery Mobile

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