@drawoharaя ❤️ це! << натисни мене 🐛 🫖 🧚
/non-icky-javascript-helper-ap-is-on-your-rails-controllers
опубліковано: 2013-06-10

див. https://gist.github.com/ahoward/5752290

Веб-додатки майже завжди потребують великої кількості невеликих JavaScript-допоміжних методів: ви знаєте, автозаповнення форм, заповнення значень за замовчуванням, валідації тощо. Це не справжні API-виклики, а просто невеликі шматочки функціональності, необхідні для роботи представлень.

Завжди виникає питання, до якого контролера підвісити ці методи. Створити загальний допоміжний контролер для всього цього? Підвісити їх до контролера, що наразі? Як поділитися бекендом JavaScript-допоміжних методів між контролерами?

Крок перший

включіть модуль RPC у ваш ApplicationController

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

Крок другий

у контролерах оголосіть RPC-допоміжні методи

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

Крок третій

налаштуйте JS для виклику RPC-методів відносно поточного контролера

  // у файлі: app/views/layouts/application.html.erb
  //
  // помітка, що URL RPC-кінцева точка відносна
  //
  // <script>
  
    jQuery(function(){
        var rpc = function(){
        // аналіз аргументів
        //
          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;
            };
            }