activeresource 객체에 대한 ActivereCord 관계를 어떻게 만들려면?
-
06-07-2019 - |
문제
이미 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
사람들 테이블이 없기 때문에 정확히 외국 키가 아닙니다. 몇 가지 질문을 남깁니다.
내 말은 어떻게 말합니까?
Person
ActiveResource
그 반대has_many
Articles
?할 것이다
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