ref: https://gist.github.com/ahoward/5752290
las aplicaciones web casi siempre terminan necesitando una plétora de pequeños métodos auxiliares de javascript: ya sabes, formularios de autocompletado, poblar valores predeterminados, validaciones, etc. estos no son llamadas a la API propiamente dichas, solo pequeños fragmentos de funcionalidad necesarios para que las vistas funcionen.
siempre hay una pregunta sobre qué controlador colgar estos métodos. ¿haces un controlador de ayuda global para todo esto? ¿los cuelgas del controlador en cuestión? ¿cómo compartir el backend de métodos auxiliares de javascript entre controladores?
paso uno
incluir el módulo RPC en tu ApplicationController
class ApplicationController < ::ActionController::Base
include RPC
end
paso dos
en los controladores, declara los métodos auxiliares rpc
class PostsController < ApplicationController
rpc(:defaults) do |params|
post = Post.new(params)
post.set_defaults!
post.as_json
end
end
paso tres
configura js para poder llamar a los métodos rpc relativos al controlador actual
// 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']