Rails js.erb file not executing

I'm just trying to get the index.js.erb file to execute the alert ("hi") command, however it does not work. I'm new to rails and I was wondering if you guys could help me! It seems that the index.js server_controller.rb method does not correctly execute format.js. Any suggestions / ideas?

servers_controller.rb

def index @servers = Server.all update_all_servers #calls the method update_all_servers in application_controller.rb respond_to do |format| format.html # index.html.erb format.json { render json: @servers } format.js #index.js.erb end end 

index.js.erb

 alert("hi"); $("#comments").fadeOut(); 

index.html

 <%- model_class = Server.new.class -%> <div class="page-header"> <h1><%=t '.title', :default => model_class.model_name.human.pluralize %></h1> </div> <table class="table table-striped"> <thead> <tr> <!-- <th><%= model_class.human_attribute_name(:id) %></th> --> <th><%= model_class.human_attribute_name(:hostname) %></th> <th><%= model_class.human_attribute_name(:port) %></th> <!-- <th><%= model_class.human_attribute_name(:username) %></th> <th><%= model_class.human_attribute_name(:password) %></th> <th><%= model_class.human_attribute_name(:ssh_username) %></th> <th><%= model_class.human_attribute_name(:ssh_password) %></th> <th><%= model_class.human_attribute_name(:source_branch) %></th> --> <th><%= model_class.human_attribute_name(:source_revision) %></th> <th><%= model_class.human_attribute_name(:release) %></th> <th><%= model_class.human_attribute_name(:rhel_version) %></th> <th><%= model_class.human_attribute_name(:gpu_type) %></th> <th><%= model_class.human_attribute_name(:total_users) %></th> <th><%= model_class.human_attribute_name(:current_users) %></th> <th><%= model_class.human_attribute_name(:created_at) %></th> <th><%=t '.actions', :default => t("helpers.actions") %></th> </tr> </thead> <tbody> <% @servers.each do |server| %> <tr> <!-- <td><%= link_to server.id, server_path(server) %></td> --> <td><%= server.hostname %></td> <td><%= server.port %></td> <!-- <td><%= server.username %></td> <td><%= server.password %></td> <td><%= server.ssh_username %></td> <td><%= server.ssh_password %></td> <td><%= server.source_branch %></td> --> <td><%= server.source_revision %></td> <td><%= server.release %></td> <td id="comments"><%= server.rhel_version %></td> <td><%= server.gpu_type %></td> <td><%= server.total_users %></td> <td><%= server.current_users %></td> <td><%=l server.created_at %></td> <td> <%= link_to t('.edit', :default => t("helpers.links.edit")), edit_server_path(server), :class => 'btn btn-mini' %> <%= link_to t('.destroy', :default => t("helpers.links.destroy")), server_path(server), :method => :delete, :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')), :class => 'btn btn-mini btn-danger' %> </td> </tr> <% end %> </tbody> </table> <%= link_to t('.new', :default => t("helpers.links.new")), new_server_path, :class => 'btn btn-primary' %> 

application.js

 // This is a manifest file that'll be compiled into application.js, which will include all the files // listed below. // // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. // // It not advisable to add code directly here, but if you do, it'll appear at the bottom of the // the compiled file. // // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT TO BE PROCESSED, ANY BLANK LINE SHOULD // GO AFTER THE REQUIRES BELOW. // //= require jquery //= require jquery_ujs //= require twitter/bootstrap //= require_tree . 
+7
source share
2 answers

Point your browser to /servers.js and it will show js but will not work, as it is not in the script tag.

The respond_to section selects one and only one type of material for the response, so when you look at the html page, if you want to include some kind of javascript, it should be on the html page in the script tag somehow. The index.js.erb format is for requests that are created exclusively for javascript output, such as ajax requests.

+2
source

I know this question is old, although here is the solution, because I stumbled upon this problem twice that day, without even remembering;)

According to this post, you should check your request type . It must be JS . If you request a controller action through AJAX , just leave a dataType-attribute . This will set the request type to */* , but it will still work.

Example:

 $.ajax({ url: '/users/auth/facebook/callback', type: 'GET' }); 

EDIT

The request for the controller should look like this:

 Processing by Users::OmniauthCallbacksController#facebook as JS 

With my solution, it will look like this:

 Processing by Users::OmniauthCallbacksController#facebook as */* 

Setting the dataType type to "JS" did not work for me, but it would still work as if it were JS.

+1
source

All Articles