14

I want to use a JavaScript library such as a jQuery plugin. Do I use the Rails asset pipeline? Or should I include it with a javascript_include_tag? What are my options and what is the recommended practice?

3 Answers 3

33

Will you use the JavaScript library on only a few pages or throughout the application? If you will use it throughout the application, use the asset pipeline by adding it to the vendor/assets/javascripts folder. If you plan to use the library on a single page, use the javascript_include_tag.

Here are rules of thumb to guide your use of JavaScript in Rails:

  • Logically organize your site-wide scripts in the app/assets/javascripts/ folder.

  • Copy external JavaScript libraries (such as jQuery plugins) to the vendor/assets/javascripts folder.

  • List site-wide scripts in the app/assets/javascripts/application.js manifest.

  • Let the Rails asset pipeline combine them all in one minimized application.js file.

  • For scripts that are used on a few pages that have few visits, load as page-specific JavaScript.

  • Put page-specific JavaScript in the lib/assets/javascripts folder.

For page-specific JavaScript, use <%= yield(:head) %> in the application layout and <% content_for :head ... %> in the view.

For a full explanation with all the details, see my article:

Including External JavaScript Files in Rails

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

2 Comments

page-specific js should go in app/assets/, organized with the same directory structure as your views. lib/ is nominally for assets shared across applications
The last link here is a 404. :/
3

To access Javascript on a single file, javascript_include_tag is the best option.

With that what you can do is too add 'Rails.application.config.assets.precompile += %w( yourfilename.js )' to your 'config/initializers/assets.rb' file.

Comments

1

In Haml

= javascript_include_tag "example"

To load the file assets/javascripts/example.js

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.