Rails - 显示的URL与页面加载不同

时间:2013-07-20 04:23:30

标签: ruby-on-rails jquery-mobile model-view-controller controller

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

这是一个过程。

  1. 用户提交参与表格。
  2. 参与控制器保存记录,然后呈现移动或html版本的团队#Candidate。
  3. 以下是该流程的服务器日志,其中包含一些详细信息。

        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栏显示/参与
    3. 这不是从桌面发生的。

      以下是参与控制人。它有一些复杂的逻辑,但实质上它是检测记录是否已经创建,并为该情况做了不同的事情,以及移动的情况。

      def创建     @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
      

1 个答案:

答案 0 :(得分:0)

@Heikki获得了很好的解决方案。

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

这可以放在application.mobile.erb

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

其他参考:Error with Redirects in JQuery Mobile