1

コンテナであるメインモデルページがあります。このページには、To Do リスト、メモ、ファイル、およびディスカッションを含めることができます。アイデアは、それらを特別注文することです。

Page.last.container # [Todolist_obj, Note_obj, File_obj, Note_obj, Discussion_obj, File_obj, File_obj] 
  • そこでMongodbを使おうとアプローチするに至りました

  • または、hstore で Postgres を使用することも考えましたが、それが役立つかどうかはわかりません

  • または、任意のデータベースだけで、ページを取得するときにすべてのオブジェクトを逆シリアル化し、保存するときにオブジェクトをシリアル化する可​​能性があります

  • または、スーパークラス Item を作成し、そこから MTI を使用してすべての包含オブジェクトを継承し、Page に多くの関係を持たせることができます。

だから私はどの方法が最善か分からないのですか?

それとももっと良い方法がありますか?

4

1 に答える 1

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
于 2013-06-10T19:19:02.973 に答える