2008-10-08 3 views
5

People 애플리케이션이 이미있는 게시 회사의 라이브러리 애플리케이션을 작성한다고 가정 해 보겠습니다.ActiveResource 개체에 대한 ActiveRecord 관계를 만들려면 어떻게해야합니까?

그래서 내 라이브러리 응용 프로그램에서 나는

class Person < ActiveResource::Base 
    self.site = "http://api.people.mypublisher.com/" 
end 

이 지금은 각 Person에 대한 Article의를 저장할 : 나는 내 데이터베이스에 다음 테이블이 거라고 상상

class Article < ActiveRecord::Base 
    belongs_to :person, :as => :author 
end 

를 :

Articles 
id (PK) | title (string) | body (text) | author_id (integer) 

author_id은 정확히 Foreign-K 내가 피플 테이블을 가지고 있지 않기 때문에. 즉 몇 가지 질문을 잎 :

  1. 어떻게 내 PersonActiveResource 객체를 알 수 있습니까 그것이 has_manyArticles?

  2. Articles.find(:first).author이 작동합니까? belongs_toActiveRecord이없고 뒷받침 테이블이 없으므로 작동합니까?

    class Person < ActiveResource::Base 
        self.site = "http://api.people.mypublisher.com/" 
    
        def articles 
        Article.find(:all, :conditions => { :person_id => self.id }) 
        end 
    
        def add_article(article) 
        article.person_id = self.id 
        end 
    end 
    

    그러나 무엇 has_many 이벤트의 많은을 잃게 :

답변

2

ActiveResource는 ActiveRecord와 같은 연관성이 없으므로 많은 것을 포기하고 있습니다.

이미 # 1 번 질문에 대한 답변을 찾았습니다. 질문 # 2와 마찬가지로, ActiveRecord 모델 아티클은 ActiveResource 모델에 "belongs_to"연결로 구성된 경우 올바르게 작동해야합니다. Aritcle.find (: first) .author는 원하는 사람 객체를 반환해야합니다.

5

나는 내가 어떤 작업 얻을 수 가정, # 1에 대한 하나의 가능성을 가정,이 작업을 수행하는 것입니다.

0

더 나은 솔루션은 범위를 반환하는 메서드를 만드는 것이라고 생각합니다.

class Person < ActiveResource::Base 
    self.site = .. 
. 
    def articles 
    Article.for_person(self.id) 
    end 
end 

class Article < ActiveRecord::Base 
    named_scope :for_person, lambda { |pid| { :conditions => { :person_id => pid }}} 
end 
관련 문제