Matt Briggs
Matt Briggs

Reputation: 42208

How to include a css or javascript in an erb that is outside the layout?

Sorry for the slightly noobish question, as I am writing my first rails app.

I get the idea of the layout view, but if you are using them, is there any way to include a view specific js or css file? For example, I have layouts/products.html.erb, and for products/edit.html.erb I want products_edit.css, but I don't want that css for all product views, what is the best practice to accomplish that?

Upvotes: 26

Views: 43972

Answers (3)

Samuel
Samuel

Reputation: 38346

If you have a generic edit.css file, I would suggest an if in your layout

<%= stylesheet_link_tag 'edit' if params[:action] == 'edit' %>

Otherwise you can use content_for with a yield to add additional tags into the head.

layout.html.erb

<head>
  ...
  <%= yield(:header) if @content_for_header %>
</head>

products/edit.html.erb

<% content_for :header do -%>
  <%= stylesheet_link_tag 'edit_product' %>
<% end -%>

Upvotes: 47

erik
erik

Reputation: 6436

You can add a stylesheet tag inside the head tag of the layout by doing something like this:

layouts/products.html.erb:


    <head>
        ...
        <%= yield :css %>
        ...
    </head>

products/edit.html.erb


<% content_for :css do
    stylesheet_link_tag 'products_edit'
end %>

Upvotes: 10

Otto
Otto

Reputation: 19331

You can't if your </head> tag is in your layout.

You may want a different layout for that controller action. Like this on the render:

 render :action => "index", :layout => "some_other_layout

Also you can set a different default layout for a whole controller with this line in the controller class:

layout "some_other_layout"

Check the API docs, there's some complex things you can do with conditionals on that layout method.

Upvotes: -7

Related Questions