@drawoharaj'aime ça ! << clique ici 🐛 🫖 🧚
/non-icky-javascript-helper-ap-is-on-your-rails-controllers
publié le: 2013-06-10

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

Les applications web ont presque toujours besoin d'une multitude de petites méthodes d'aide en javascript : vous savez, les formulaires à complétion automatique, le remplissage des valeurs par défaut, les validations, etc. Ce ne sont pas des appels API proprement dits, mais de petits bouts de fonctionnalité nécessaires pour faire fonctionner les vues.

Il y a toujours la question de savoir à quel contrôleur attacher ces méthodes. Doit-on créer un contrôleur d'aide global pour tout cela ? Doit-on les attacher au contrôleur en question ? Comment partager le backend des méthodes d'aide javascript entre les contrôleurs ?

étape un

inclure le module RPC dans votre ApplicationController

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

étape deux

dans les contrôleurs, déclarez les méthodes d'aide rpc

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

étape trois

configurer js pour pouvoir appeler les méthodes rpc relatives au contrôleur actuel

  // 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;
              };
            }
          };
          // normalize ajax options
          //
          ajax['url'