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 ||