rails页面标题

tyb*_*103 26 html ruby-on-rails erb title

我不喜欢rails默认使用页面标题的方式(只使用控制器名称),所以我正在研究一种新的方式:

应用控制器:

def page_title
    "Default Title Here"
end
Run Code Online (Sandbox Code Playgroud)

帖子控制器:

def page_title
    "Awesome Posts"
end
Run Code Online (Sandbox Code Playgroud)

应用布局:

<title><%=controller.page_title%></title>
Run Code Online (Sandbox Code Playgroud)

它运行良好,因为如果我在当前使用的任何控制器中没有page_title方法,它将回退到应用程序控制器中的默认值.但是,如果在我的用户控制器中我希望它返回"注册"以进行"新"操作,但是可以退回到其他任何操作?有没有办法做到这一点?

其次,还有其他人有任何其他方式在rails中进行页面标题吗?

Gar*_*ett 86

我不同意其他答案,我认为标题不应该按行动设定,而应在视图本身内设定.保持视图中的视图逻辑和控制器内的控制器逻辑.

在你的application_helper.rb添加内:

def title(page_title)
  content_for(:title) { page_title }
end
Run Code Online (Sandbox Code Playgroud)

然后将其插入到您的<title>:

<title><%= content_for?(:title) ? content_for(:title) : "Default Title" %></title>
Run Code Online (Sandbox Code Playgroud)

因此,当您在视图中时,您可以访问从控制器设置的所有实例变量,您可以在那里进行设置.它也可以将杂波控制在控制器之外.

<%- title "Reading #{@post.name}" %>
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我比我自己更喜欢这个答案.我不知道`content_for`.谢谢发帖. (4认同)

Rap*_*met 7

我喜欢在我的布局中放置一个可以通过设置覆盖的动作中的一个简单的默认标题@title:

<title><%= @title || "Default Title Here" %></title>
Run Code Online (Sandbox Code Playgroud)

然后,您可以在操作中生成标题:

def show
  @post = Post.find_by_id params[:id]
  @title = "tybro's blog: #{@post.title}"
end
Run Code Online (Sandbox Code Playgroud)