我正在使用 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