0

我在 rails 3 应用程序上使用 mobile_detection 为移动用户提供单独的页面。我正在通过 Safari 中的用户代理进行测试。问题出在我的一个进程上,rails 向 Web 浏览器 URL 栏发布的 URL 与其实际加载的页面不同。因此,如果我刷新页面,它会尝试转到它放在网络栏中的错误 URL。

这是过程。

  1. 用户提交参与表格。
  2. 参与控制器保存记录,然后呈现 Teams#Candidate 的移动版本或 html 版本。

这是该进程的服务器日志,其中排除了一些详细信息。

    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 确实加载了 teams/candidate.mobile.erb 页面。
  2. 但是,页面加载后的 URL 栏显示 /participations

这不会从桌面发生。

下面是参与控制器。它有一些复杂的逻辑,但本质上它是检测记录是否已经创建,并针对这种情况和移动设备的情况做一些不同的事情。

def create @participation = Participation.new(params[:participation]) @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

结尾

4

1 回答 1

0

@Heikki 提供了一个很好的解决方案。

希望这对其他人有帮助。解决方案是在主布局中手动设置 URL。鉴于 JQM 使用页面缓存和内部/外部页面加载的方式,这对于某些页面加载是必要的。

这可以放在 application.mobile.erb

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

附加参考: JQuery Mobile 中的重定向错误

于 2013-07-20T04:57:19.580 回答