Status of Rails' link_to_function deprecation?

20,538

Solution 1

link_to_function is NOT deprecated in 3-2-stable branch and it won't be deprecated in 3-2-stable in future. But it IS depreacated in current master branch and will be deprecated in Rails 4.0 when it releases. So I guess it will removed from rails code in 4.1. So you can teach students to do this (from the rails 4 changelog):

We recommend the use of Unobtrusive JavaScript instead. For example:

link_to "Greeting", "#", class: "nav_link"

$(function() {
  $('.nav_link').click(function() {
    // Some complex code

    return false;
  });
});

or

link_to "Greeting", '#', onclick: "alert('Hello world!'); return false", class: "nav_link"

Solution 2

This is my solution to this problem:

in javascript:

// define function to be called
function awesome_func(a,b,c){
  console.log(a,b,c);
}

//clean implementation of link_to_function
$(function(){
  $('[data-on][data-call][data-args]').each(function(d){
    try{
       $(this).on( $(this).data('on'), function(){
          window[$(this).data('call')].apply(window,$(this).data('args'))})
    }catch(e){
       if(typeof(console) != 'undefined' && typeof(console.log === 'function'))
         console.log(e);
    }
  });
})

Then you can do in rails:

link_to 'Awesome Button', '#', data:{on: :click, call: 'awesome_func',args: '[1,"yeah",{b:4}]'

this seems the way they want us to code :), i liked link_to_function, though

Share:
20,538
at.
Author by

at.

Updated on July 09, 2022

Comments

  • at.
    at. almost 2 years

    What is the status of the link_to_function Javascript helper in Rails? I read, including in this stackoverflow question, that it was deprecated in Rails 3.0, then undeprecated, then deprecated again in 3.2.4. Is it something I can depend on and teach students? I just read the release notes (from a search) for Rails 3.2.8:

    Reverted the deprecation of button_to_function and link_to_function helpers. Rafael Mendonça França

    Where does this stand now?

  • Btuman
    Btuman almost 11 years
    How would this refactor look when link_to_function is used in a helper?
  • pwz2000
    pwz2000 over 9 years
    @Btuman Did you find a solution for this? I upgraded Rails and link_to_function is deprecated and I'm not sure how to do the unobtrusive js for it.
  • Btuman
    Btuman over 9 years
    I think I did, alas, I no longer have access to the code. basically had to redo it from scratch. (The depreciation of this helper function drove me nuts)
  • Hovo
    Hovo over 9 years
    This reloads the page after the javascript. Adding <code>remote: true</code> stops the client refreshing but it still sends a request to the server.. Is there anyway of stoping the request all together?
  • jpw
    jpw over 8 years
    Excellent solution, should be the (new) accepted answer IMO. One note the first function can be on the page, the second function needs to be invoked after jquery is loaded so on the layout,
  • Elias Baixas
    Elias Baixas over 7 years
    You have to be aware of some security issues though: if you have some kind of wysiwyg (tinymce or fckeditor) you would need to always remove data-on, data-click and data-args on user provided div elements.