2009-05-16 9 views
1

Ich versuche ActiveResource Objekte für drei Objekte in einer internen Anwendung zu erstellen.Wie verwende ich ActiveResource mit einem benutzerdefinierten URL-Schema?

Es gibt Tag s, Tagging s, und Taggable s:

http://tagservice/tags/:tag 
http://tagservice/taggings/:id 
http://tagservice/taggables/:type/:key 

Tag ‚s :tag ist der URL-kodierten wörtliche Tag-Text. Tagging 's :id ist eine automatisch inkrementierte Ganzzahl. Taggable 's :type ist eine Zeichenfolge. Es gibt keine endliche Menge an Taggable-Typen - der Service kann das Taggen unterstützen. Taggable 's :key ist das ID-Feld, das der Dienst für den Taggable-Typ zuweist. Es könnte ein Geschäftswert sein, wie der Benutzername eines Angestellten oder einfach eine automatisch inkrementierte Ganzzahl.

Wenn diese ActiveRecord Objekte wären, würde ich sie so etwas wie dieser Code:

class Tag < ActiveRecord::Base 
    has_many :taggings 
    has_many :taggables, :through => :taggings 
    def self.find_by_id(id) 
    find_by_name(id) 
    end 
    def to_param 
    CGI::escape(self.name) 
    end 
end 

class Tagging < ActiveRecord::Base 
    belongs_to :tag 
    belongs_to :taggable 
end 

class Taggable < ActiveRecord::Base 
    has_many :taggings 
    has_mnay :tags, :through => :taggings 
    def self.find_by_id(id) 
    find_by_type_and_key(*id.split('/')) 
    end 
    def to_param 
    "#{self.type}/#{self.key}" 
    end 
end 

Wer weiß, was diese Klassen wie in ActiveResource möchten? Vielen Dank!

+0

Hat meine Antwort geholfen? Wenn ja, kannst du es bitte annehmen? :) Wenn nicht - lassen Sie mich wissen, was Sie schließlich getan haben. –

Antwort

1

Verwenden Sie Rails 3.0? Wenn das der Fall ist, dann können Sie fast genau dasselbe in ActiveResource jetzt tun.

Wenn nicht, prüfen hyperaktiv Ressource versuchen: http://github.com/taryneast/hyperactiveresource

Was ich erweitert Active Arbeit fast die gleiche wie Active Record zu machen. Es unterstützt Assoziationen, genau wie AR - obwohl es "durch" nicht unterstützt - Sie müssen möglicherweise für z. B. einen Baz, der has_many: foos,: through =>: bars hat:

# ugly, but does the job 
def foos 
    return [] unless bars.present? 
    foo_set = [] 
    self.bars.each {|b| foo_set += b.foos } 
    foo_set 
end