2012-03-07 8 views
2

私はRuby on Railsアプリケーションを書いています。これには2種類のユーザータイプがあります(売り手と買い手を考えてみましょう)。私は認証を処理するためにdevise gemを使用しています。Ruby on rails - 2ユーザーのタイプ

私は3つの理由で単一テーブルの継承を使いたくありません:
1)私は自分のユーザーテーブルにたくさんの列を入れたくありません(私は売り手と買い手の両方のフィールドを私は分離売り手と買い手を維持する)私のデータベース
3にNULL値をたくさん持っている必要はありません一つのテーブル、およびそれらが異なるfiledsの多くを持つことになります)
2)は、パフォーマンススピード

を改善するのに役立ちます

私は、売り手と買い手のための2つの別々のモデルを作成することにしました。長い話が短い - それはいくつかの問題を引き起こした(すなわち、単一のフォームでログインを扱うことが困難で、 "プライベートメッセージ"のような単純なものに対して多態的な関連付けを使用し、コードDRYなどを維持する)。

したがって、ここに質問がある:
いくつかの共通フィールドを持つモデル(ユーザー)を作成して、deviseによる認証を簡単に処理し、belongs_toとhas_oneの関連付けで個別のモデル(売り手と買い手)に詳細情報を格納することをお勧めします。このようなもの:

class User < ActiveRecord::Base 
    has_one :seller 
    has_one :buyer 
end 

class Seller < ActiveRecord::Base 
    belongs_to :user, :conditions => "user_type= 'seller'" 
end 

class Buyer < ActiveRecord::Base 
    belongs_to :user, :conditions => "user_type= 'buyer'" 
end 

これは良い解決策ですか?それとも、単一のテーブル継承が良いアイデアだろうと思いますか?

どのような問題が発生する可能性がありますか?
各ユーザーのプロファイルページを表示するルートは何ですか?私に知らせてください - をwebsite.com/sellers/idとあなたは私の問題のためのよりよい解決策を考えることができる場合

をwebsite.com/buyers/idように私は何かを持っていると思います。

+1

同じユーザーが[Rails - 2ユーザータイプのアプリケーション設計](http://stackoverflow.com/questions/9517406/rails-application-design-for-2-user-types)の可能な複製。 –

答えて

1

あなたが売主と買主のために別々のテーブルを作成し、そこInheritance and polymorphic-associations in railsなどのポリモーフィックな関連を使用している場合はそれも良いだろう。

これらの2つのことを分離することで、DBクエリの速度が向上し、売り手と買い手のロジックを自分のクラスに保つことも非常に良い方法です。