2

管理者がページに別のレイアウトを選択できるようにしています。今はただのテキスト入力で、名前を入力します。つまり、事前に名前を知っている必要があります。

タイプミスをすると例外が発生するため、コントローラーで次のようにしてレイアウトが存在することを確認しています。存在しない場合は、デフォルトで「アプリケーション」になります。

lookup_context.template_exists?(@page.layout, "layouts")

レイアウトのリストを取得できれば、コントローラーをチェックインする必要はもうありません。

actionview を確認しましたが、何も見つかりませんでした。Dir を使用してレイアウト ファイルのリストを取得できますが、含まれているエンジンのすべてのレイアウトが必要です。

エンジンからのものを含む、利用可能なすべてのレイアウトのリストを生成する方法を誰かが知っているかどうか疑問に思っていますか?

4

1 に答える 1

3

慣例により、すべてのレイアウトはapp/views/layoutsディレクトリに存在します。デフォルトで使用できるレイアウトは、このディレクトリにあるファイルです。レイアウトのリストを取得するには、これを試してください:

@layouts = Dir.glob('app/views/layouts/*')
for layout in @layouts
    puts layout
end

こちらで説明されているように、アプリでエンジンのカスタム パスを定義した場合は、それらのレイアウトを明示的に追加する必要があります。

@layouts << Dir.glob('custom_engine_path/*')
于 2013-02-16T14:32:50.103 に答える