정렬 가능한 개체를 매우 성공적으로 구현하기 위해 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
MTI를 사용하는 방법입니다. 왜 다른 사람들이 너에게 그렇게 좋지 않은가? 그렇지 않으면 왜 다른 사람 대신에이 방법을 선호합니까? –
나는 개인적으로 * MTI 방식을 고수 할 것이다. 왜냐하면 a) 데이터베이스에 의존하지 않고 b) 내가 이미 구현 한 유일한 접근 방식이기 때문이다. 나는 NoSQL 데이터베이스를별로 좋아하지 않지만 단순히 개인적인 취향 일뿐입니다. 내 접근 방식은이 문제에 대한 유일하게 실행 가능한 솔루션이 아닙니다. –