Rails 如果文件存在则渲染视图
Rails Render View If File Exists
我正在创建基于设备模板的模块化 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>
我有一个页脚模板,如果文件存在(可能不存在),我想将其包括在内:
_footer.html.erb
<p class="text-muted">
© <%= Time.now.year.to_s %> All rights reserved
</p>
File.exist?当它在那里时不渲染页脚。如何仅在模板文件存在的情况下包含页脚?
尝试在 render
末尾使用 rescue nil
。
render nil
什么都不显示。
<%= render 'layouts/footer' rescue nil %>
希望对你有帮助,干杯!
不要使用rescue
,这可能非常危险。这样比较好
<% if File.exists? Rails.root.join('app/views/layouts/footer.html.erb') %>
<%= render 'layouts/footer' %>
<% end %>
比 rescue
策略或 Fail.exists?
策略更好的答案是使用 template_exists?
.
更好,因为它使用了缓存。
<% if lookup_context.template_exists?('layouts/footer') %>
<%= render 'layouts/footer' %>
<% end %>
的更多信息
我正在创建基于设备模板的模块化 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>
我有一个页脚模板,如果文件存在(可能不存在),我想将其包括在内:
_footer.html.erb
<p class="text-muted">
© <%= Time.now.year.to_s %> All rights reserved
</p>
File.exist?当它在那里时不渲染页脚。如何仅在模板文件存在的情况下包含页脚?
尝试在 render
末尾使用 rescue nil
。
render nil
什么都不显示。
<%= render 'layouts/footer' rescue nil %>
希望对你有帮助,干杯!
不要使用rescue
,这可能非常危险。这样比较好
<% if File.exists? Rails.root.join('app/views/layouts/footer.html.erb') %>
<%= render 'layouts/footer' %>
<% end %>
比 rescue
策略或 Fail.exists?
策略更好的答案是使用 template_exists?
.
更好,因为它使用了缓存。
<% if lookup_context.template_exists?('layouts/footer') %>
<%= render 'layouts/footer' %>
<% end %>
的更多信息