1

Rails3.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.erbapplication.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 に答える