Hi Gurus, how do I include a partial in my main layout?
In views/layouts/application.html.erb I have
...
<%= render :partial => 'navbar_tabs' %>
...
No matter where I put _navbar_tabs.html.erb (or renamed it to
_navbar_tabs.erb in desperation) I get the error
Showing app/views/layouts/application.html.erb where line #20 raised:
Missing template messages/_navbar_tabs.erb in view path app/views
By convention, any partials that are loaded by “application.html.erb”
are loaded by all controllers in the application. That being the
case, when rendering app->messages->index:
The app…erb line will read "<%= render :partial => ‘layouts/
app_wide_partial’ %>
The partial will be found in views/layouts/
_app_wide_partial.html.erb
When the line in app…erb is reached that reads “<%= yield %>”
The file “views/messages/index.html.erb” is rendered
And you have a file views/layouts/application.html.erb
that calls “<%= render :partial => ‘navbar_tabs’ %>”
Rails will look for the partial named: views/messages/
_navbar_tabs.html.erb
It is customary practice to follow the convention “… :partial =>
‘directory/partial’ %>” just so there is no confusion. Thus, if you
had additional message related tabs, you would include in views/
messages/index.html.erb: <%= render :partial => ‘messages/
msg_navbar_tabs’ %>
works. Seems kind of ugly, though–even in layouts, shouldn’t a form
look in its own directory for a partial?
It does, you’re just misunderstanding what “its own directory” refers
to. Your form is not a part of “layouts,” it’s a part of the
controller rendering it.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.