1

我正在使用 Rails 3.2。

在我的应用程序中,我有一个application.html.erb服务于“正常”模式的application.mobile.erb文件和一个服务于“移动”模式的文件。

当我以“正常”模式加载主页时,application.html.erb文件正确地与“正常”模式主页一起提供home.html.erb。当我切换到“移动”模式application.mobile.erb时,“移动”模式主页会正确提供home.mobile.erb。当我切换回“正常”模式时,会提供正确的“正常”模式home.html.erb文件,但使用不正确application.mobile.erb的(“移动”模式的)文件。

application.mobile.erb如果我在错误提供后刷新页面,application.html.erb则正确加载。

这是用于从普通模式切换到移动模式的链接

<a href="/en?mobile=0" class="ui-link">Full Site</a>

这是用于从移动模式切换到普通模式的链接

<a href="/en?mobile=1" class="ui-link">Mobile Site</a>

如果我更改正常开关,使其像这样从不同的子域请求(这是我已经设置的子域)

<a href="http://mobile.localhost.local:3000/en?mobile=0" class="ui-link">Full Site</a>

应用程序 erb 文件已正确切换,一切正常。注意:如果我添加相同的主机,它不起作用。

据推测,rails 路由以不同方式处理同一服务器上的路径,但我真的不明白这是如何以及是否是错误?

有谁知道发生了什么?

更新

application_controller 中处理参数的代码是:

before_filter :set_locale, :prepare_for_mobile
...
def mobile_device?
  if session[:mobile_param]
     session[:mobile_param] == "1"
  else
     request.user_agent =~ /Mobile|webOS/
  end
end
helper_method :mobile_device?

def prepare_for_mobile
  session[:mobile_param] = params[:mobile] if params[:mobile]
  request.format = :mobile if mobile_device?
end

我的 mime_types.rb 中有这个

Mime::Type.register_alias "text/html", :mobile

这是发生的示例http://www.zode64.com

注意右上角的移动和普通链接有新的子域,如果你用firebug切换到当前的子域,它仍然会打开正确的页面但错误的页面application.erb

4

1 回答 1

0

问题可能出在这个逻辑中:

before_filter :set_locale, :prepare_for_mobile
...

def prepare_for_mobile
  session[:mobile_param] = params[:mobile] if params[:mobile]
  request.format = :mobile if mobile_device?
end

如果 params[:mobile] 从 1 变为 0(即从移动变为全站点),则会话变量和 request.format 都未设置,并且站点继续运行,就好像它仍处于移动模式一样。

于 2012-05-24T02:19:19.360 回答