0

Rails 3 でテンプレートの継承を使用しようとしています。application_controller.rb に次のコードがあります。

layout :set_layout

def set_layout
  layout_name = Club.find(1).layout.name
  prepend_view_path("views/#{layout_name}")
  layout_name
end

これにより、特定のクラブ (この場合は「layout1」と呼ばれる) に関連付けられたレイアウトが正しく設定されますが、次のフォルダー構造を作成してビューを上書きしようとすると:

app
-views
--home
---indes.html.erb
--layout1
---home
----index.html.erb

views/layout1/home/ index.html.erbの代わりにviews /home/index.htmlをキャッチします。

次のようにビューパスを印刷すると:

<% controller.view_paths.paths.each do |t| %>
  <%= t %><br>
<% end %>

正しいビュー/レイアウト1 を最初のものとして出力しますが、それでも正しいindex.html.erbファイルの内容が見つかりません。

私のlayoutsフォルダーにあるlayout1.html.erbでは、yieldとだけ言っています。

どういうわけか概念を誤解しましたか?

4

1 に答える 1

0

これを調べるのに何時間も費やした後、私は問題を見つけました。次のようなレイアウトの設定にのみ使用される関数でビューパスを設定していました

layout :set_layout

def set_layout
  prepend_view_paths ...
  #return the layout name
end

フィルターの前に使用して、別の関数でビューパスを設定する必要がありました。

以前にこれに気付かなかったのは、ビュー パスがレイアウトで正しく印刷されていたからです。

于 2012-11-29T17:07:39.223 に答える