Yasser Kotrsi
Yasser Kotrsi

Reputation: 71

javascript asset dosen't load in my html.erb page

I am using :

Linux Ubuntu 16.04

ruby 2.4.0p0;

rails 5.1.1

I am a begginner in rails and I have followed the Ruby on Rails 4 Essential Training in lynda.com in order to learn. I am now stuck at the loading js assets task.

I have created the "app/assets/javascripts/demo.js" file which contains the js function :

function jsRoar(name) {
  alert('I am ' + name + '. Hear me roar!');
}

Then I have load this file in my manifest file "app/assets/javascripts/public.js"

//= require jquery
//= require jquery_ujs
//= require demo

After that I have added external include of js to my layout at "app/views/layouts/application.html.erb":

<%= javascript_include_tag "public" %>

In my controller I have included my layout by typing at "app/controllers/demo_controller.rb"

layout 'application'

And finally I have called my function by typing these js codes in my demo/index.html.erb :

<%= link_to('Roar', '#', :onclick => "jsRoar('Yassser');return true;") %>   
<%= javascript_tag("jsRoar('Rails');")%>

After that i get "undefined function" in my chrome console and the alert doesn't appears .I have defined the function in the same html.erb and it works so it's not a problem of javascript i think. I must mention also that, at first when i run my server, i have obtained a problem of assets compilation so I have fixed by adding this line in "config/initializers/assets.rb":

Rails.application.config.assets.precompile += %w( public.js)

I am available for more details. Please help.

Upvotes: 1

Views: 355

Answers (3)

Yasser Kotrsi
Yasser Kotrsi

Reputation: 71

My problem was resolved after deleting the "demo.coffee" file. I discovered that the my issue is derived from the fact that I have two files with the same name (but different extensions) "demo.js" and "demo.coffee". Since the Rails asset helpers treat coffescript and js files equally this is ambiguous. So I have deleted the "demo.coffee" and all my problems are settled. Thank you all mates. Great thnx for @max with his reply in this post

Upvotes: 2

Alex C
Alex C

Reputation: 1335

See if this code works in your view:

$(document).ready(function(){
   jsRoar('Yassser');
})

Upvotes: 0

m3characters
m3characters

Reputation: 2290

I think this:

<%= javascript_tag("jsRoar('Rails');")%>

should be:

<%= javascript_include_tag("demo") %>

Upvotes: 0

Related Questions