2011-01-05 3 views
2

저는 Rails 3 프로그래밍 초보자이며 적절한 모델을 만드는 데 한 가지 문제가 있습니다.배열과의 HABTM 관계

도서의 참고 문헌을 관리하는 응용 프로그램이 있다고 가정 해 봅시다. 이는 참조 된 기사 목록의 각 장에 대한 매핑을 관리합니다. 내가 좋아하는 뭔가를 할 수 문서 일부 에 대한 그래서 : 참고 문헌 측면에서

create_table :articles do |t| 
    t.string :title 
    t.text :content 
    ... 

을 그래서, ref 실제로 기사에 대한 참조의 배열입니다

create_table :bibliographies do |t| 
    t.string :chapter 
    t.text :ref 
    ... 

같은 모델을 가지고 싶습니다 그것은 serialize ActiveRecord 메서드를 통해 관리됩니다.

자 이제 문제는 배열 @bibliography.ref의 요소가 (Ruby의 의미에서) 여러 개의 article_id에 대한 참조가되도록하는 방법입니다.

어떻게 이러한 관계를 모델링 할 수 있으며이를 표현하기 위해 Rails 3 코드를 작성해야합니까? 나를 혼란에 빠뜨리는 것은 @bibliography의 단일 인스턴스의 단일 필드가 많은 @ article.id를 참조한다는 것입니다. 당신이 정말로 그런 관계를 저장할 경우, 나는이 같은 서지 모델의 방법, 무엇인가를 정의 할

+0

TI 기사를 관련 외부 키를 직렬화의 포인트는 무엇입니까? 왜 너는 정상적인 방법을 사용하지 않는거야? 난 정말 이해가 안 돼요, 미안 해요 – apneadiving

답변

4

사전에

덕분에

(즉 심판을 가정하면 ID의 배열입니다)
def articles 
    Article.where(:id => self.ref) 
end 

나는 관계를 다르게 저장합니다. article_id 및 bibliography_id 필드가있는 세 번째 테이블/모델 articles_bibliographies를 추가합니다. 그런 다음 ActiveRecord에 내장 된 has_many : through 연결을 사용할 수 있습니다. 당신의 참고 문헌 클래스

당신은 다음과 같은 것이다 : 당신은 그냥 egze의 제안에 따라 자세한 내용은 여기를 http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

+0

고맙습니다, 나는 배열을 유지할 수있는만큼 많은 것을 통해 관계를 사용할 수있는 가능성을 배제하지 않았습니다. 그래서 그것을 구현하는 방법에 대해 연구 할 것입니다. – bitwelder

0

읽기 bibliography.articles

@ 할 수있는 다음

has_many :articles_bibliographies 
has_many :articles, :through => :articles_bibliographies 

을, 내가 발견 내 문제를 해결하는 방법 (배열을 사용하지 않고!). 그래서 has_many-through 관계를 만들지 만, 참고 문헌에서 언급 된 내용을 개의 기사에 저장하려면 articles_bibliographies 테이블에 order_nr 필드가 있습니다. 여기서 첫 번째, 두 번째 내가 검색하고와 요소의 정렬 된 목록을 표시 할 수 있습니다

create_table :articles_bibliographies do |t| 
    t.references :article 
    t.references :bibliography 
    t.integer  :order_nr 

이 방법 : 등의 글은 참고 문헌에 언급

@bibliography.articles.order("order_nr ASC")