2

views/adminフォルダー内のすべてに対して単一のパーシャルを使用する必要があります。私のセットアップ:

/app/views/
        + admin
            + accounts
            + users
        + layouts
            - application.html.slim
        + application
            - _header.html.slim
        + users
        + accounts

_header.html.slimで呼び出されたパーシャルがあり/views/application/ます。パーシャルは からレンダリングされ/views/layouts/application.html.slimます。

_header.html.slimディレクトリの下にあるものに対して別のパーシャルをレンダリングしたい/views/admin。新しい を作成してand_header.html.slimに追加することはできますが、自分自身を繰り返したくありません。の下のすべてに対して単一のパーシャルが必要です。/views/admin/accounts/views/admin/usersadmin

どうすればこれができますか?ディレクトリ内のフォルダーを上書きすることを期待してフォルダーを/views/admin/application追加しようとしましたが、うまくいきませんでした。/views/admin/layouts/view

4

2 に答える 2

2

レイアウト/application.html.slim:

- if controller.controller_name == "admin"
    == render :partial => "admin/header"
- else
    == render :partial => "application/header"
于 2012-08-08T13:43:12.387 に答える
0

フォルダー自体の構造は、実行または適用されるフォルダーを制御しません。フォルダー構造は、意味のある方法でフォルダーを整理するのに役立つだけです。

必要に応じて、いくつかの方法で探しているものを達成できます。

1 つの方法は、コントローラーでレイアウト (目的のパーシャルを含む) を指定することです。ここで概説されrender :layout => 'some_layout_name'ているオプションを使用します(詳細については、「2.2.11.2 :layout オプション」の見出しにスキップしてください)。

もう 1 つの方法は、たとえば、レンダリングするレイアウトまたはパーシャルの名前を含む変数をアクションに設定し、ビューで次のようにすることです。

<% if @custom_partial == "slim" %>
  <%= render :partial => 'header.html.slim' %>
<% end %>

そのため、カスタム レイアウトを指定するか (パーシャルを含むレイアウト全体をカスタムにする場合)、どのパーシャルをいつレンダリングするかを制御するフラグ変数を設定し、その変数を使用してビューでのレンダリングの流れを制御します。これらのオプションのどれが適切かは、どれがよりクリーンで最も信頼性が高く、プロジェクトにとって意味があるかによって異なります。つまり、決定するのはあなた次第です。

于 2012-08-08T13:42:42.720 に答える