Techioz Blog

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 として残ります。