partials in layouts ?

Hi Gurus, how do I include a partial in my main layout?

In views/layouts/application.html.erb I have

<code> ... <%= render :partial => 'navbar_tabs' %> ... </code> 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

Can you help?

TIA, Craig

Try giving the whole path in render like this:

<%= render :partial => ‘/messages/navbar_tabs’ %> # if your partial is in messages directory.

Let us know if this does not work.

Thanks, Abhinav

Thanks--

<%= render :partial => 'layouts/navbar_tabs' %>

works. Seems kind of ugly, though--even in layouts, shouldn't a form look in its own directory for a partial?

Anyway, thanks!

Seems surprising to me as well.

Thanks, Abhinav

What happens if you name it _navbar_tabs.html.erb and put in in views/messages?

Colin

Thanks–

<%= render :partial => ‘layouts/navbar_tabs’ %>

works. Seems kind of ugly, though–even in layouts, shouldn’t a form

look in its own directory for a partial?

If you’re using the partial in the layout, it means the partial will be displayed

on every page of the site by default. Is this the case?

-Conrad

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.