Delete / Destroy is not working in rails 3 with jQuery

后端 未结 4 1270
长情又很酷
长情又很酷 2020-12-10 07:25

My delete/destroy is not working for Rails 3.

Not for any scaffold or even for new projects.

<%= link_to \'Destroy\', card, :confirm => \'Are y         


        
4条回答
  •  星月不相逢
    2020-12-10 08:28

    If you are using Jquery not prototype then you need to add Jquery.rails.js in your project else everytime you try to delete anything it will take you to show page.

    I dont remember from where I got the solution and this Jquery.rails.js file. But sure from some trust-able source.

    Here is the code for that file. May be will help somebody.

    jQuery(function ($) {
        var csrf_token = $('meta[name=csrf-token]').attr('content'),
            csrf_param = $('meta[name=csrf-param]').attr('content');
    
        $.fn.extend({
            /**
             * Triggers a custom event on an element and returns the event result
             * this is used to get around not being able to ensure callbacks are placed
             * at the end of the chain.
             *
             * TODO: deprecate with jQuery 1.4.2 release, in favor of subscribing to our
             *       own events and placing ourselves at the end of the chain.
             */
            triggerAndReturn: function (name, data) {
                var event = new $.Event(name);
                this.trigger(event, data);
    
                return event.result !== false;
            },
    
            /**
             * Handles execution of remote calls firing overridable events along the way
             */
            callRemote: function () {
                var el      = this,
                    data    = el.is('form') ? el.serializeArray() : [],
                    method  = el.attr('method') || el.attr('data-method') || 'GET',
                    url     = el.attr('action') || el.attr('href');
    
                if (url === undefined) {
                  throw "No URL specified for remote call (action or href must be present).";
                } else {
                    if (el.triggerAndReturn('ajax:before')) {
                        $.ajax({
                            url: url,
                            data: data,
                            dataType: 'script',
                            type: method.toUpperCase(),
                            beforeSend: function (xhr) {
                                el.trigger('ajax:loading', xhr);
                            },
                            success: function (data, status, xhr) {
                                el.trigger('ajax:success', [data, status, xhr]);
                            },
                            complete: function (xhr) {
                                el.trigger('ajax:complete', xhr);
                            },
                            error: function (xhr, status, error) {
                                el.trigger('ajax:failure', [xhr, status, error]);
                            }
                        });
                    }
    
                    el.trigger('ajax:after');
                }
            }
        });
    
        /**
         *  confirmation handler
         */
        $('a[data-confirm],input[data-confirm]').live('click', function () {
            var el = $(this);
            if (el.triggerAndReturn('confirm')) {
                if (!confirm(el.attr('data-confirm'))) {
                    return false;
                }
            }
        });
    
    
        /**
         * remote handlers
         */
        $('form[data-remote]').live('submit', function (e) {
            $(this).callRemote();
            e.preventDefault();
        });
        $('a[data-remote],input[data-remote]').live('click', function (e) {
            $(this).callRemote();
            e.preventDefault();
        });
    
        $('a[data-method]:not([data-remote])').live('click', function (e){
            var link = $(this),
                href = link.attr('href'),
                method = link.attr('data-method'),
                form = $('
    '), metadata_input = ''; if (csrf_param != null && csrf_token != null) { metadata_input += ''; } form.hide() .append(metadata_input) .appendTo('body'); e.preventDefault(); form.submit(); }); /** * disable-with handlers */ var disable_with_input_selector = 'input[data-disable-with]'; var disable_with_form_selector = 'form[data-remote]:has(' + disable_with_input_selector + ')'; $(disable_with_form_selector).live('ajax:before', function () { $(this).find(disable_with_input_selector).each(function () { var input = $(this); input.data('enable-with', input.val()) .attr('value', input.attr('data-disable-with')) .attr('disabled', 'disabled'); }); }); $(disable_with_form_selector).live('ajax:after', function () { $(this).find(disable_with_input_selector).each(function () { var input = $(this); input.removeAttr('disabled') .val(input.data('enable-with')); }); }); });

    Update:

    You can get latest copy of Jquery.rails.js from here.

       https://raw.github.com/rails/jquery-ujs/master/src/rails.js
    

提交回复
热议问题