Rails 4 がレイアウトをレンダリングしない
概要
Rails 4のレイアウトに関して私は現在びっくりしています。現時点では、コントローラーのレイアウトを作成し、レイアウト「layout_name」を使用してコントローラーで正常に呼び出されています。
しかし、問題は、そのコントローラーにリダイレクトするたびに、ページ自体がレンダリングされるだけで、その上のレイアウトはレンダリングされないことです。
コードの抜粋は次のとおりです。
class LoginController < ApplicationController
layout "login_layout"
def index
user = User.new
end
def login_user
validate_credential = User.login(params[:user])
if validate_credential[0] == true
session[:user_firstname] = validate_credential[1][0]["firstname"].capitalize
session[:user_lastname] = validate_credential[1][0]["lastname"].capitalize
session[:user_id] = validate_credential[1][0]["id"]
session[:advisory_class] = validate_credential[1][0]["advisory_class"].capitalize
redirect_to :controller=> 'dashboard', :action=> 'home'
else
redirect_to :action=>'index'
end
end
私のlogin_user関数のredirect_toがレイアウトをレンダリングしないことに注意してください。
これは(別のコントローラーからの)ログアウトのコードです
class DashboardController < ApplicationController
layout 'dashboard_layout'
def home
end
def settings
end
def students
end
def logout
session.clear
redirect_to :controller=>'login',:action=>'index'
end
ページ自体はレンダリングされますが、そのコントローラーのレイアウトは含まれません。
多くの解決策を探しましたが、それでも希望はありません。
これは、ダッシュボード コントローラーから呼び出されたとき (redirect_to)、root_path がどのように見えるかを示した写真です。
そしてこれは私の root_path の設計に違いありません。 (レイアウトも含まれます)。 URL は同じですが、レイアウトがレンダリングされていないことに注意してください。しかし、ページを更新するとレイアウトが表示されます。
解決策
エラーを見つけました。それは Turbolinks です。 application.js と gem ファイルのターボリンクを削除したところ、魅力的に動作しました。呼び出される特定のレイアウトの CSS は変更されないため、レイアウトは変更されません。アプリがログイン コントローラーにリダイレクトするときの CSS は、login.self?etc.etc である必要があります。ただし、ダッシュボードの CSS として残ります。