【问题标题】:How do I show the name of a page I am on in a Rails application如何在 Rails 应用程序中显示我所在页面的名称
【发布时间】:2020-09-19 14:46:15
【问题描述】:

我有一个如下的标题

但我希望当前页面的名称是动态的。例如,当我访问文章页面时,标题应该是文章,而位置页面应该是位置。

我是 Ruby 和 Rails 的新手,所以这可能很容易,但我不知道如何操作。提前致谢!

詹姆斯

【问题讨论】:

  • 一种方法是在控制器中定义一个实例变量。例如,在您的文章控制器中,在您渲染视图之前,@page = 'Articles'。然后在视图中可以使用@page。不过,我不清楚当你说这个名字是“动态的”时你的意思是什么。

标签: ruby-on-rails ruby header


【解决方案1】:

app/views/layouts/application.html.erb 内替换 <title>...</title>

<title>
  <% if content_for?(:title) %>
    <%= yield :title %>
  <% end %>
</title>

您将能够从任何其他视图动态更改标题,例如:

# app/views/articles/index.html.erb

<% content_for(:title) do %>
  Articles
<% end %>
# app/views/locations/index.html.erb

<% content_for(:title) do %>
  Locations
<% end %>

假设您有 @article 对象和 name 字段

# app/views/articles/show.html.erb

<% content_for(:title) do %>
  @article.name
<% end %>

UPD

根据@engineersmnky 的建议,您可以将标题作为参数传递content_for(:title, 'Articles')

https://apidock.com/rails/ActionView/Helpers/CaptureHelper/content_for

【讨论】:

  • 感谢您回来雅科夫。所以基本上我的 _nav.html.erb 文件中有一个小标题,它在 Home 中是硬编码的。因此,当我浏览所有页面时,它仍然显示 home。而我希望这个小标题更改为我当前所在的页面。更有活力一点!我觉得它应该是一行代码。我不想在每个视图中都更改标题!这可能是唯一的方法,但我不确定!谢谢
  • @spickermann 提供的问题下方有一个链接。基于控制器名称的解决方案。
  • 可以使用面包屑ruby-toolbox.com/categories/Breadcrumb_Builders添加_nav.html.erb中的标题
  • 可以通过使用content_for(:title, 'Articles') 而不是块语法来使它更清晰
【解决方案2】:

在您的项目文件夹中打开 app/views/layouts/application.html.erb。 该文件包含应用程序标准命名空间中每个页面的 head 标签。 页面名称在标题标签内。您可以使用 标签动态更改它。

【讨论】:

    猜你喜欢
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多