kei*_*ith 3 css rest ruby-on-rails twitter-bootstrap ruby-on-rails-4
我有两个导航栏,一个用于主页,另一个用于站点的其余部分.我不知道如何以干爽的方式做这件事.看起来我想将其余的网站导航栏放在布局视图中,但我不知道如何从页面中排除布局我猜?主页布局的其余部分与网站的其余部分相同,因此我唯一想要排除的是该页面的导航栏并将其替换为另一个页面.链接也是一样的.因此,navigation_links也可以在两者中呈现.
这个问题有多种解决方案,但我最喜欢的是利用Rails的模板继承.假设你的家庭控制器看起来像这样:
class HomeController < ApplicationController
end
Run Code Online (Sandbox Code Playgroud)
Rails通过其名称查找此控制器呈现的视图的布局home.如果没有这样的布局,它将寻找以其超类命名的一个,application依此类推.这在Rails文档中有解释.
查找部分实际上以相同的方式工作.假设您要navigation_bar在布局中渲染部分内容:
render 'navigation_bar'
Run Code Online (Sandbox Code Playgroud)
如果你没有指定它的确切位置(比如application/navigation_bar,Rails将再次使用模板继承来查找部分.
所以首先它会寻找home/navigation_bar,然后是application/navigation_bar.如果您只想显示不同的导航栏,而不重新定义布局或其他任何内容,则可以使用此优势.
因此,您需要将常规导航栏放入application/_navigation_bar,并将主导航栏放入home/_navigation_bar.然后在布局中渲染导航栏:
render 'navigation_bar'
Run Code Online (Sandbox Code Playgroud)