10

In my index.html.erb file I'm trying to display the title to my object (a "listing") and the normal "show", "edit", and "destroy" links and/or buttons. With :method => :delete and :confirm => "are you sure?", neither link_to or button_to will present the javascript confirmation box. Here is my index.html.erb:

<h2><a href="#" onclick="alert('Hello world!'); return false;">Click Here for a Javascript test</a></h2>   
<table>  
  <tr>
    <th>List Title</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>    
<% @listings.each do |listing| %>
  <tr>
    <td><%= listing.title %></td>
    <td><%= button_to 'Show', listing %></td>
    <td><%= button_to 'Edit', edit_listing_path(listing) %></td>
    <td><%= button_to( 'Destroy', listing, 
                       :confirm => 'Are you sure?', :method => :delete)%> </td>
    <td><%= link_to "Destroy", listing, :confirm => "Are you sure?", :method => :delete %> </td>
  </tr>
<% end %>
</table>

The "Hello World" JS confirmation link at the top of the listing works perfectly, so I'm pretty sure that unobtrusive javascript is working fine for my app. (I also confirmed I have the necessary-- javascript_include_tag :defaults and csrf_meta_tag are in my application template.) The Rails documentation confirms the arguments that I'm using are supported (url, :confirm, :method). However neither button_to or link_to will generate the JS alert indicated by :confirm. One other bit of strangeness, with the exact same arguments, button_to will delete a record while link_to does not.

Any suggestions on what to investigate to fix this would be appreciated.

Thanks!

Don Leatham
  • 2,694
  • 4
  • 29
  • 41
  • Check `application/config.rb` to see whether you're loading the JS files you think you are as defaults. (I was bit by this recently when I tried to make a rails app using jQuery instead of Prototype. The defaults were empty.) – Telemachus Feb 14 '11 at 01:40

4 Answers4

2

I ran into this exact issue before when I was accidentally including both Prototype and jQuery. Check the resources that are getting loaded to ensure that you're not loading both frameworks somehow.

Jordan T. Cox
  • 334
  • 3
  • 12
  • 1
    Thanks for the pointers. I'm a ruby nube, but after a bit of googling, I could tell that I did indeed hava some javascript config issues. 1) The rails application builder that I used put my jquery.js file in the "public/javascript" folder, but within a folder call jquery (I had to move it up a level.) 2) the config/application.rb file had two javascript configuration lines. I deleted one and made sure the second one pointed to the jquery.js file mentioned above. With those to changes all worked. – Don Leatham Feb 14 '11 at 06:37
1

I just ran into the same issue, newest Rails available up to date, and solved it by moving the :confirm option to html_options part of link_to arguments, like:

<%= link_to (t '.scenarios.open'), { :controller => 'scenarios', :action => 'show', :name => scenario.name }, :confirm => 'really?' %>

Indeed, needed the jquery-rails gem, but that one was already here and properly linked.

themarketka
  • 672
  • 6
  • 14
1

Check if Rails' Unobtrusive scripting adapter for jQuery (jquery_ujs) are loaded into your site, then you don't need to worry about third-party javascripts:

// app/assets/javascript/application.js    
//= require jquery_ujs
Edu Lomeli
  • 2,263
  • 20
  • 18
1

AFAIK this issue is caused due to the link_to option which causes problems when its method is anything other than GET (http method), so i use button_to option which works fine

Magesh
  • 760
  • 7
  • 16