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'