3

すべてのアクションが同様のビュー レイアウトを共有する Rails コントローラーがあります。いくつかの異なるビューでコードを複製するのではなく、すべてのアクションが同じビューを共有するようにします (おそらく別のコントローラーからのアクションも)。

これは、すべてのアクションに呼び出しを追加し、同じビューファイルを使用するように指示することで実現できることを認識してrender ...いますが、これをアクションのグループにフックして、すべてのアクション内で明示的にならないようにする方法はありますか?

4

2 に答える 2

2

レイアウトが機能しない理由をよりよく説明できますか? このコードで問題が解決すると思います。

UsersControllernew と create を除くすべてのアクションで同じビューを使用するとします。次に、簡単に行うことができます:

def UsersController < ApplicationController
  layout "shared_layout", except: [:new, :create]
  layout "new_user_layout", only: [:new, :create]

  def show
    # Renders in app/views/layouts/shared_layout.html.erb
  end

  def index
    # Renders in app/views/layouts/shared_layout.html.erb
  end

  def new
    # Renders in app/views/layouts/new_user_layout.html.erb
  end

  def create
    # Renders in app/views/layouts/new_user_layout.html.erb
  end
end

次に、共有でレンダリングする必要があるものを示すレイアウトを作成できます。のapp/views/layouts/shared_layout.html.erb

<html>
  <body>
    <%= render "shared/shared_partial_1.html.erb" %>
    <%= render "shared/shared_partial_2.html.erb" %>
    <%= render "shared/shared_partial_3.html.erb" %>
    <%= yield %>
  </body>
</html>

これにより、コントローラーのすべてのアクションに対して同じ方法でパーシャル 1、2、および 3 がレンダリングされます。それの何が問題なのですか?

于 2012-08-17T17:12:31.833 に答える
0

いくつかの解決策があります:

views/layoutこれらのアクション専用のレイアウトを作成できます。

次に、コントローラーでレイアウトを設定します。

class LalasController < ApplicationController
    layout "your_action_layout"
end

について言及しているときは、これについて話しているかもしれませんがrender ...、パーシャルからミニ レイアウトを作成できます。

views/controller_names/my_layout

<div class="my-layout">
    <%= yield %>
</div>

そして、各アクションで次のことを行います。

<%= render layout: "my_layout" do %>
    <div></div> <!-- All the code of your view -->
<% end %>
于 2012-08-16T22:35:35.097 に答える