Rails,在主页上呈现不同的标题

时间:2014-03-25 20:56:03

标签: ruby-on-rails

我正在创建一个rails应用程序,我必须区分主页的标题。

我已经使用_home_header版本和_header版本创建了一个部分版本,但我不知道如何管理更改。

标题包含在我的布局中,我为每个页面呈现相同的布局。我如何告诉"布局"我请求主页时使用_home_header版本而不是标准版本?

4 个答案:

答案 0 :(得分:14)

我会使用current_page?助手并查看root_path

# app/views/layouts/application.html.erb
<% if current_page?(root_path) %>
    <%= render 'layouts/home_header' %>
<% else %>
    <%= render 'layouts/header' %>
<% end %>

答案 1 :(得分:2)

application.html.erb

中使用类似的内容
<% if request.original_url == root_url %>  ## Specify the home url instead of root_url(if they are different)
  <%= render 'layouts/home_header' %>      ## Assuming that _home_header.html.erb is under layouts directory
<% else %>
  <%= render 'layouts/header' %>           ## Assuming that _header.html.erb is under layouts directory
<% end %>

答案 2 :(得分:1)

通常,您在特定于控制器的子目录中添加更多特定版本的页面。

也就是说,如果你有一个布局application.html.erb,它会使标题部分...

# app/views/layouts/application.html.erb
<!doctype html>
<html>
...
<body>
  <%= render 'header' %>
  ...

这将在header中找到app/views/<controller_name>/部分优先于app/views/application/。因此,您的网站范围标题将位于app/views/application/_header.html.erb,而您的主页部分将位于app/views/home/_header.html.erb,并且它将“正常工作”。 Rails会加载更“特定”的标题。

答案 3 :(得分:1)

@meagar建议的一个选项是在你的应用程序控制器上使用before_action

class ApplicationController
  beore_action :set_header

  private

    def set_header
      @header = if is_my_page
        "Special header"
      else
        "Other header"
      end
    end
end

和您的layouts/application.html.erb

<title><%=@title%></title>

他的解决方案的亮点是所有文本都保存在视图文件中,这是有道理的。不那么明亮的部分是难以理解的。