I'm trying to make a JS snippet work in a concrete page with Rails 4 and Turbolinks. I've tried with the standard solution:
<script type="text/javascript">
var ready = function() {
// Bla bla
};
$(document).ready(ready);
$(document).on('page:load', ready);
</script>
But it doesn't seem to work. My snippet is something like this:
<script type="text/javascript">
function ismready()
{
var API_KEY = "api key";
var roomId = "room id";
var ism = new Ismuser(API_KEY, roomId);
ism.init({
board: {
layer: "board"
},
video: {
camsContainer: "guest"
},
chat: {
layer: "chat"
},
moderator: true,
});
}
</script>
<script src="http://assets.ismuser.com/v0.4/js/ismuser.js" type="text/javascript"></script>
The snippet doesn't work as expected (even with the standard solution) and finally I just want to disable Turbolinks in this page.
How can i do it?
-- Solution
<% content_for :body do %>
<% if controller.controller_name == 'home' && controller.action_name == 'demo1' %>
<body data-no-turbolink="true">
<% end %>
<% end %>
Solutions on here didn't work for me, turns out Turbolinks changed the syntax for disabling Turbolinks on a single page in their new release (5.0.0).
To disable it on a page with Turbolinks 5.0.0+, add
data-turbolinks="false"
to the links of the page you want to disable:It also works on any of the links' ancestors, so in this example both links will lead to non-turbolinked pages:
To enable it on a single link with all the other links disabled in a specific element:
I also tried adding it to the body of the page I want it disabled on, similar to the old method but with using
data-turbolinks="false"
instead ofdata-no-turbolink="true"
- and that worked too!Source: Turbolinks on GitHub
Here is an alternative way to code this up, I just choose which tag to display based on the controller name.
Add
“data-no-turbolink” to the <body> tag
of the the page you want it disabled onIf you have a shared layout file which i am assuming you do, you can do an if statement and check the params[:controller] and params[:action] and just add it to the one area
Here's a solution in
Haml
withRails 5.2.1
In your
application.haml
:In your
template.haml
:Here's a cleaner solution:
In
/app/views/layouts/application.html.erb
, replace the<body>
tag with this:Now, if you want to disable turbolinks in a particular view, e.g.
/app/views/home/index.html.erb
, you can add this to the file:for Rails 4
and that will end up rendering as:
for Rails 5
In Rails 5, the syntax is slightly different:
and that will end up rendering as:
For anyone is already using rails 5. If you want to disable entire turbolink for a specific page, just add this line "data-turbolinks='false'" to the body of that page: