69

How do I use CSS with RoR? When I link externally, I'm never able to see the files. I cp'd the .css file to every folder I could think of...views, controller, template, and nothing seems to work.

What do I need to do to enable external CSS files with a rails application? I'm new to rails, so forgive me if this is basic.

8 Answers 8

66

Put the CSS files in public/stylesheets and then use:

<%= stylesheet_link_tag "filename" %>

to link to the stylesheet in your layouts or erb files in your views.

Similarly you put images in public/images and javascript files in public/javascripts.

Sign up to request clarification or add additional context in comments.

4 Comments

there is no "public/stylesheets" where can I add my file?
Then you can create it add the public folder in the same directory as your app folder. Then add a stylesheets folder within the public folder.
The link tag needs to be in the head part of my document, correct? If I only need the style in one erb partial, is there a way I can conditionally add it when that partial is needed? Or is there a way I can add if the current route matches a specific one?
@JulienLamarche tad bit late, but I would look into the content_for method. There is an example further down in section 3.5 Using Nested Layouts. guides.rubyonrails.org/…
30

If you are using rails > 3 version, then there is a concept called asset pipeline. You could add your CSS to

app/assets/stylesheets

then it will automatically be picked up by the app. (this is useful as rails will automatically compress the CSS files)

read more here about the asset pipeline

1 Comment

That's app/assets/stylesheets (should be 's' on 'assets')
16

Use the rails style sheet tag to link your main.css like this

<%= stylesheet_link_tag "main" %>

Go to

config/initializers/assets.rb

Once inside the assets.rb add the following code snippet just below the Rails.application.config.assets.version = '1.0'

Rails.application.config.assets.version = '1.0'
Rails.application.config.assets.precompile += %w( main.css )

Restart your server.

1 Comment

This is the correct (more specific) answer per Rails documentation. You must add it to the assets.rb for precompile!
14

I did the following...

  1. place your css file in the app/assets/stylesheets folder.
  2. Add the stylesheet link <%= stylesheet_link_tag "filename" %> in your default layouts file (most likely application.html.erb)

I recommend this over using your public folder. You can also reference the stylesheet inline, such as in your index page.

1 Comment

This is not working for me, giving AssetsFilter error
4

The original post might have been true back in 2009, but now it is actually incorrect now, and no linking is even required for the stylesheet as I see mentioned in some of the other responses. Rails will now do this for you by default.

  • Place any new sheet .css (or other) in app/assets/stylesheets
  • Test your server with rails-root/scripts/rails server and you'll see the link is added by rails itself.

You can test this with a path in your browser like testserverpath:3000/assets/filename_to_test.css?body=1

1 Comment

Sorry to necropost, but you are just as guilty as I. However, this is not the case at all. If you want to utilize the asset pipeline, and you have properly linked your CSS file in your application.html.haml (or .erb) your server will throw an error, and tell you to add it to the precompile (config/initializers/assets.rb) sorta like so Rails.application.config.assets.precompile += %w( custom.css )
3

With Rails 6.0.0, create your "stylesheet.css" stylesheet at app/assets/stylesheets.

Comments

2

To add to the above, the most obvious place to add stylesheet_link_tag is in your global application layout - application.html.erb.

Comments

0

Have you tried putting it in your public folder? Whenever I have images or the like that I need to reference externally, I put it all there.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.