@drawoharai ❤️ this! << click me 🐛 🫖 🧚
/non-icky-javascript-helper-ap-is-on-your-rails-controllers
pubblicato il: 2013-06-10

ref: https://gist.github.com/ahoward/5752290

Le applicazioni web quasi sempre finiscono per aver bisogno di una serie di piccoli metodi di aiuto javascript: sai, moduli di completamento automatico, popolamento dei valori predefiniti, validazioni, ecc. questi non sono chiamate API propriamente dette, solo piccoli frammenti di funzionalità necessari per far funzionare le visualizzazioni.

C'è sempre la questione di quale controller appendere questi metodi. Creare un controller di aiuto globale per tutta questa roba? Appendere questi metodi al controller in questione? Come condividere il backend di metodi di aiuto javascript tra i controller?

passaggio uno

includere il modulo RPC nel tuo ApplicationController

  class ApplicationController < ::ActionController::Base
    include RPC
  end

passaggio due

nei controller, dichiarare i metodi di aiuto rpc

  class PostsController < ApplicationController
    rpc(:defaults) do |params|
      post = Post.new(params)
      post.set_defaults!
      post.as_json
    end
  end

passaggio tre

impostare js per poter chiamare i metodi rpc relativi al controller corrente

  // in file: app/views/layouts/application.html.erb
  //
  // notice the *relative* url rpc endpoint
  //
  // <script>
  
    jQuery(function(){
        var rpc = function(){
        // parse args
        //
          var args = Array.prototype.slice.call(arguments);
          var ajax;
          var method;
          if(args.length == 1 && typeof(args[0]) == 'object'){
            ajax = args.shift();
          } else {
            ajax = {};
            for(var i = 0; i < args.length; i++){
              var arg = args[i];
              switch (typeof(arg)) {
                case 'object':
                  ajax['data'] = arg;
                  break;
                case 'function':
                  ajax['success'] = arg;
                  break;
                case 'string':
                  method = arg;
                  break;
              };
            };
          };
          ajax['url'] = ajax['url'] || rpc['url'];
          method = method ||