див. 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;
};
}