2016-12-10 5 views
0

Railsでモデルを構築する方法について質問があります。例えば、ソーシャルネットワークtumblrを取ってみましょう。そこにはさまざまな方法で投稿できます。リンク、テキスト、写真、会話。今、私は似たようなことをしたいと思いますが、私は自分のアプリのモデリングにぴったりです。 Postモデルを使用したいとします。だから、私のユーザーは、テキストだけ、または画像付きで投稿することができます。だから私もImageモデルが必要だと思います。ユーザーがイベントをポストの形として投稿できるようにしたいとしましょう。だから私はEventモデルが必要だと思います。そういうわけで、将来、別のタイプの投稿について別のアイデアを持っているかもしれません(したがって、常に投稿に関連するはずです)。あなたはモデルと関係をどのように構築して簡単に拡張できるのでしょうか?私は、のEnumsのようなものを考えています。Railsでさまざまなタイプのモデル投稿

答えて

0

私は、たとえばpostsテーブルのすべての投稿の種類(画像、イベント...) のために一つのモデルPostを使用します。

class Post < ActiveRecord::Base 
    enum post_type: [ :event, :image, :message] 

    validates :image_url, presence: true, if: ->{ image? } 
    validates :start_at, :end_at, presence: true, if: ->{ event? } 
    validates :title, :body, presence: true, if: ->{ message? } 
end 

create_table :posts do |t| 
    t.belongs_to :author 
    t.column :post_type, :integer, default: 0 
    t.column :title, :string 
    t.column :body, :text 
    t.column :image_url, :string 
    t.column :star_at, :datetime 
    t.column :end_at, :datetime 
    t.timestamps 
end 

モデルが各ポストタイプのための具体的な検証を持っています

この方法を選択する理由:

  • Easy fetch allデータベースからのデータ。ユニオンなし、複数選択なし。
  • キャッシング、オーナーのルールを簡単に管理できます。
  • クリーンモデルを使用するすべてのポストタイプについて、モデルの懸念事項を使用します。
+0

なぜ、複数のモデルを使用するのではなく、すべてのタイプに1つのモデルを使用する方が良いのか説明できますか? – Sylnois

+0

は答えに理由を追加しました –

関連する問題