문제

이미 People 신청서가있는 출판사를위한 도서관 응용 프로그램을 작성한다고 가정 해 봅시다.

그래서 내 라이브러리 응용 프로그램에서 나는 가지고 있습니다

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

그리고 지금은 저장하고 싶습니다 Article각각에 대한 s Person:

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

데이터베이스에 다음 테이블이있을 것이라고 생각합니다.

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

author_id 사람들 테이블이 없기 때문에 정확히 외국 키가 아닙니다. 몇 가지 질문을 남깁니다.

  1. 내 말은 어떻게 말합니까? Person ActiveResource 그 반대 has_many Articles?

  2. 할 것이다 Articles.find(:first).author 일하다? 할 것이다 belongs_to 아무도 없다는 점을 감안할 때조차도 일합니다 ActiveRecord 그리고 후원 테이블이 없습니까?

도움이 되었습니까?

해결책

지적한 바와 같이, Activeresource는 ActiveRecord가하는 의미에서 연관성이 없기 때문에 많은 것을 포기하고 있습니다.

질문 #1에 대한 답을 이미 찾았습니다. 질문 #2의 경우, ActiveRecord 모델 기사는 Activeresource 모델과 "Folgs_to"연관성으로 구성 될 때 잘 작동해야합니다. aritcle.find (: first). Author는 원하는 사람 객체를 반환해야합니다.

다른 팁

#1에 대한 한 가지 가능성은 내가 일할 수 있다고 가정하면 다음을 수행하는 것입니다.

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 제안.

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

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top