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?
views:
1399answers:
4Try this in layout file:
<% if controller.action_name == 'index' %>
<%= stylesheet_link_tag 'index' %>
<% else %>
<%= stylesheet_link_tag 'else' %>
<% end %>
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.
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 -%>
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 %>