Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 与rails中站点的其他部分相比,我的主页使用不同的导航栏的最佳方式是什么?_Css_Ruby On Rails_Twitter Bootstrap_Rest_Ruby On Rails 4 - Fatal编程技术网

Css 与rails中站点的其他部分相比,我的主页使用不同的导航栏的最佳方式是什么?

Css 与rails中站点的其他部分相比,我的主页使用不同的导航栏的最佳方式是什么?,css,ruby-on-rails,twitter-bootstrap,rest,ruby-on-rails-4,Css,Ruby On Rails,Twitter Bootstrap,Rest,Ruby On Rails 4,我有两个导航栏,一个用于主页,另一个用于站点的其余部分。我不知道如何以一种干爽的方式来做这件事。看起来我想把其余的站点导航栏放在layouts视图中,但我不知道如何从页面中排除布局?主页布局的其余部分与站点的其余部分相同,因此我唯一想排除的是该页面的导航栏,并将其替换为另一个导航栏。链接也将是相同的。因此,导航链接也可以在这两种格式中呈现。使用助手方法 在视图模板中,您可以执行以下操作: <% if content_for? :nav %> <%= content_for

我有两个导航栏,一个用于主页,另一个用于站点的其余部分。我不知道如何以一种干爽的方式来做这件事。看起来我想把其余的站点导航栏放在layouts视图中,但我不知道如何从页面中排除布局?主页布局的其余部分与站点的其余部分相同,因此我唯一想排除的是该页面的导航栏,并将其替换为另一个导航栏。链接也将是相同的。因此,导航链接也可以在这两种格式中呈现。

使用助手方法

在视图模板中,您可以执行以下操作:

<% if content_for? :nav %>
  <%= content_for :nav %>
<% else %>
  <%= render 'layouts/nav' %>
<% end %>

然后在您的主页中:

<% content_for :nav, render('layouts/custom_nav') %>


就我个人而言,我更喜欢这种方法——它是声明性的,它让其他人(包括未来的你)明确地知道默认nav可以被覆盖。

这个问题有多种解决方案,但我最喜欢的是利用Rails的模板继承。假设您的家庭控制器如下所示:

class HomeController < ApplicationController
end
如果您没有指定它的确切位置(如
应用程序/导航栏
),Rails将再次使用模板继承来查找部分内容

因此,首先它将查找
主页/导航栏
,然后查找
应用程序/导航栏
。如果您只想显示不同的导航栏,而不需要重新定义布局或任何其他内容,则可以利用此功能

因此,您需要将常规导航栏放置在
应用程序/\u导航栏
中,将家庭导航栏放置在
家庭/\u导航栏
中。然后在布局中呈现导航栏:

render 'navigation_bar'
render 'navigation_bar'