25-01-2011, 02:08 PM
(25-01-2011, 11:09 AM)niahoo a écrit :Citation :Tu peux utiliser les sources de données que tu souhaites.
Ce n'est pas aussi simple pour moi qui ne connais pas ruby, car ma classe (le modèle) Post se traduit comme ceci :
Code :class Post < ActiveRecord::Base
end
Donc tout ce qui est CRUD est implémenté dans ActiveRecord::Base.
Le langage importe peu, c'est l'idée qui est importante : étendre ActiveRecord::Base n'est qu'une façon d'ajouter des méthodes (il y a deux types de mixin en Ruby l'héritage et l'inclusion).
Tu peux tout à fait définir des méthodes qui miment le comportement de celles d'ActiveRecord. Un exemple d'un modèle à la main qui fonctionnerait avec un backend REST + JSON :
require 'json'
class User
# Définit des attributs.
attr_accessor :name, :email
def self.all
# [{"name":"Sephi-Chan","email":"sephichan@example.com"},{"name":"Niahoo","email":"niahoo@example.com"}]
users_as_json = RestClient.get("http://resources.example.com/users.json")
users_attributes = JSON.load(users_as_json)
users_attributes.map do |user_attributes|
User.new(user_attributes)
end
end
def self.find(id)
# {"name":"Niahoo","email":"niahoo@example.com"}
user_as_json = RestClient.get("http://resources.example.com/users/#{id.to_i}.json")
return nil if users_as_json.code == 404
user_attributes = JSON.load(user_as_json)
user.new(user_attributes)
end
def initialize(attributes = {})
attributes.each do |key, value|
self.send("#{key}=", value) # Va appeller self.name=("Niahoo"), puis self.email=("niahoo@example.com").
end
end
end
(25-01-2011, 11:09 AM)niahoo a écrit : Pour utiliser ActiveResource, il me suffirait (~) de changer l'héritage de mon modèle ? Edit: Par contre, j'ai jamais testé, le fait de contacter sur la même machine mon serveur via le protocole http est il performant par rapport à l'ouverture d'une socket ?
désolé pour le HS
Si ton API sait répondre aux méthodes d'ActiveRecord que tu utilises, tout devrait rouler.
Concernant les performances, je ne peux pas te répondre avec précision. Je suppose que le socket serait bien plus rapide, mais ce n'est qu'une intuition.
Sephi-Chan