2016-05-27 13 views
0

Rails(v。4.2.5)アプリケーションのコントローラ内の特定のレイアウトに特定のレイアウトを適用しようとしていますが、動作しません。奇妙なことに(またはそれほど奇妙ではない)レイアウトは、そのアクションが 'リソース'ルートの一部であるが、これが動作するために必要なアクションではないアクションをレンダリングするために使用されます。これは、リソース。申し訳ありませんがそれが紛らわしいと思われる場合は、ここに関連するコードと説明があります...Rails - 目的のアクションにレイアウトが適用されない

routes.rbを - ここで私は私のentriesコントローラの標準的なリソースのルートを持っているだけでなく、「入力」

のための追加ルート
get '/entries/inputs' => 'entries#inputs.html' 
resources :entries 

entries_controller.rb - ここでは、私は '入力' アクションにlayouts/cached.html.erbを適用しようとしている

class EntriesController < ApplicationController 
    layout "cached", only: [:inputs] 

    def inputs 
    end 

    def index 
     @entry = Entry.all 
    end 
end 

そのままでは、layouts/cached.html.erbは入力アクションに適用されません。しかし、私はこのためのコントローラのコードの2行目スワップアウト場合:

layout "cached", only: [:index] 

レイアウトが正常「インデックス」アクションのためにレンダリングされます。

私はここで何が欠けていますか?このレイアウトは1つのアクションに適用されますが、他のアクションには適用されないのはなぜですか?

+0

これが否決なっている場合は、私はなぜ知っていただければと思います。 – skwidbreth

答えて

1

使用このコード:

class EntriesController < ApplicationController 
layout :resolve_layout 

def inputs 
end 

def index 
    @entry = Entry.all 
end 

private 

def resolve_layout 
case action_name 
when "inputs" 
    "cached" 
else 
    "application" 
end 
end 
end 

そしてRoutes中:

get 'entries/inputs' => 'entries#inputs' 
+0

ええと...ありがとうございますが、これはまだ同じ問題があります。 'when" input "にレイアウトを使用しませんが、' when "when" when "に切り替えるとレイアウトが使用されます。 – skwidbreth

+1

私は上記のコードを変更しました。それを試してください。 –

+0

よろしくお願いします!これは非常にイライラした問題でした。アプリの開発において重要な一歩を踏み出していたばかげたハードルをクリアしてくれました。 – skwidbreth

関連する問題