2013-06-10 2 views
1

기본 모델 페이지가 컨테이너입니다. 페이지에는해야 할 일 목록, 메모, 파일 및 토론이 있습니다. 아이디어는 그들을 특별 주문으로 지키는 것입니다. 모델 속성에 객체 컬렉션이 포함되어 있습니다.

  • Page.last.container # [Todolist_obj, Note_obj, File_obj, Note_obj, Discussion_obj, File_obj, File_obj] 
    
    그래서 내가 MongoDB를

  • 아니면도 hstore와 포스트 그레스를 사용하는 방법에 대한 생각을 사용하여 접근하는 듯했으나,

  • 를이 도움이 될 것 모르거나하지 않는다 또는 어쩌면 모든 데이터베이스와 페이지를 가져올 때 모든 객체를 비 직렬화하고 저장할 때 객체를 직렬화하십시오.

  • Superclass Item을 만들고 MTI를 사용하여 그 안에 포함 된 모든 객체를 상속하고 Page가 많은 관계를 갖도록합니다.

그래서 어떤 방법이 최고인지 알 수 없습니까?

아니면 더 좋은 방법이 있을까요?

답변

1

정렬 가능한 개체를 매우 성공적으로 구현하기 위해 acts_as_list을 사용했습니다. 또한, 페이지의 요소를 별도의 모델 (여기서는 PageElement)으로 추상화합니다.

NoSQL 데이터베이스로 전환 할 필요가 없다고 생각합니다. 다음은 내가 생각하는 것을 대략적으로 보여줍니다.

class Page < ActiveRecord::Base 
    has_many :page_elements, :order => 'position' 
    has_many :todo_lists, :through => :page_elements, :source => :element, :source_type => 'TodoList' 
    has_many :notes,  :through => :page_elements, :source => :element, :source_type => 'Note' 
    has_many :files,  :through => :page_elements, :source => :element, :source_type => 'File' 
    has_many :discussions, :through => :page_elements, :source => :element, :source_type => 'Discussion' 
end 

class PageElement < ActiveRecord::Base 
    belongs_to :page 
    belongs_to :element, :polymorphic => true 
    acts_as_list :scope => :page 
end 

class TodoList < ActiveRecord::Base 
    has_one :page_element, :as => :element 
    has_one :page, :through => :page_elements 
end 

class Note < ActiveRecord::Base 
    has_one :page_element, :as => :element 
    has_one :page, :through => :page_elements 
end 

class File < ActiveRecord::Base 
    has_one :page_element, :as => :element 
    has_one :page, :through => :page_elements 
end 

class Discussion < ActiveRecord::Base 
    has_one :page_element, :as => :element 
    has_one :page, :through => :page_elements 
end 
+0

MTI를 사용하는 방법입니다. 왜 다른 사람들이 너에게 그렇게 좋지 않은가? 그렇지 않으면 왜 다른 사람 대신에이 방법을 선호합니까? –

+0

나는 개인적으로 * MTI 방식을 고수 할 것이다. 왜냐하면 a) 데이터베이스에 의존하지 않고 b) 내가 이미 구현 한 유일한 접근 방식이기 때문이다. 나는 NoSQL 데이터베이스를별로 좋아하지 않지만 단순히 개인적인 취향 일뿐입니다. 내 접근 방식은이 문제에 대한 유일하게 실행 가능한 솔루션이 아닙니다. –

관련 문제