views:

6862

answers:

3

Say I need to call a javascript file in the <head> of an ERb template. My instinct is to do the usual:

<head>
<%= javascript_include_tag :defaults %> <!-- For example -->
</head>

in my application's layout. The problem of course becoming that these javascript files are loaded into every page in my application, regardless of whether or not they are needed for the page being viewed.

So what I'm wondering is if there's a good way of loading a javascript into the the headers of, for example, all ERb templates found only in a specific directory.

+1  A: 

I usually have the following in the layout file:

<head>
  <%= javascript_include_tag :defaults %> <!-- For example -->
  <%= @extra_head_content %>
</head>

And then in the views:

<% (@extra_head_content ||= "") += capture do %>
  <%= other_content %>
<% end %>

See the API documentation for #capture

Gareth
+21  A: 

I would use content_for.

For instance, in the layout

<head>
<title>Merry Christmas!</title>
<%= yield(:head) %->
</head>

And in a view

<%- content_for(:head) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
maurycy
just saved my day. Thanks!
AnApprentice
+2  A: 

I feel there's nothing wrong including all yr defaults since they can then be cached on user's browser.

JasonOng
what about if you have includes that are only applicable to the admin part of a website?
Ali