2009-05-16 3 views
1

내부 응용 프로그램에서 세 개의 객체에 대해 ActiveResource 개의 객체를 만들려고합니다.ActiveResource를 사용자 정의 URL 스키마와 함께 사용하려면 어떻게해야합니까?

Tag의, Tagging S 및 Taggable의가 있습니다

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

Tag:tag는 URL 인코딩 된 문자 태그 텍스트입니다. Tagging:id은 자동 증가 정수입니다. Taggable:type은 문자열입니다. 유한 타입의 태그 지정 가능 유형은 없으며 서비스는 태그 지정을 지원할 수 있습니다. Taggable:key은 해당 Taggable의 유형에 지정된 서비스가 할당하는 ID 필드입니다. emplyee의 사용자 이름 또는 단순히 자동 증가 정수와 같은 비즈니스 가치가 될 수 있습니다.

이러한 ActiveRecord 객체 인 경우에, 나는 그들에게이 같은 코드 것 :

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 

사람이 해당 클래스가 ActiveResource에 같은 싶습니다 알고 있나요을? 감사!

+0

내 대답이 도움이 되었습니까? 그렇다면 그것을 받아 들여 주실 수 있습니까? :) 그렇지 않다면 - 결국 당신이 무엇을했는지 알려주세요. –

답변

1

레일즈 3.0을 사용하고 있습니까? 그렇다면 이제 ActiveResource에서 거의 똑같은 작업을 수행 할 수 있습니다.

하지 않으면, 활동적인 자원을 사용해보십시오 : 나는 액티브 레코드와 거의 같은 ActiveResource 작업을 확장 http://github.com/taryneast/hyperactiveresource

. AR과 마찬가지로 연결을 지원합니다. "통과"를 지원하지 않지만 has_many : foos, : through => : bar 바를 예로들 수 있습니다.

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