如果文件存在,Rails 渲染视图

Ken*_*n J 0 ruby-on-rails erb

我正在基于设备模板创建模块化 Rails 模板。我有主要的应用程序布局:

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= content_for?(:title) ? yield(:title) : "Rails Devise" %></title>
    <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Rails Devise" %>">
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
  </head>
  <body>
    <header>
      <%= render 'layouts/navigation' %>
    </header>
    <main role="main">
       <%= render 'layouts/messages' %>
       <%= yield %>
    </main>
    <footer>
       <% if File.exist?('layouts/footer') %>
          <%= render 'layouts/footer' %>
       <% end %>
    </footer>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我有一个页脚模板,如果文件存在(也可能不存在),我想包含该模板:

_footer.html.erb

<p class="text-muted">
  &copy; <%= Time.now.year.to_s %> All rights reserved
</p>
Run Code Online (Sandbox Code Playgroud)

文件.存在吗?当页脚存在时不渲染页脚。如何仅在模板文件存在时才包含页脚?

Moh*_*ata 7

rescue比策略或策略更好的答案Fail.exists?是使用template_exists?

它更好,因为它使用缓存

<% if lookup_context.template_exists?('layouts/footer') %>
  <%= render 'layouts/footer'  %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

更多信息关于template_exists?