2011-12-07 17 views
1

私は、Ruby on Railsの請願とユーザーの関係をモデル化する最良の方法が何であるか疑問に思っています。ここ はRuby on Railsでの嘆願とユーザーモデルの関係を実装する方法は?

-aユーザーが請願書を作成

- オンユーザーが-allユーザーが署名することができ請願

の著者であることができ請願

-aユーザーを所有する制約であります請願

これは多型の場合ですか?

答えて

1

多態性は、1つのエンティティと多数の無関係なエンティティ間の関係を処理している場合です。 1つのエンティティーと複数の類似エンティティーの間にある場合は、代わりにSTIを使用することができます。

単純なUser to Petitionの関係について話しているので、多形性について心配する理由はありません。あなたが必要とするものは、Userモデル、請願モデル、および請願者や署名者などの請願との関係についての情報を記録するUserPetition結合モデルです。

2

請願は、通常のhas_manyおよびbelongs_to関係定義を使用して作成したユーザーに単純に属します。その後、HABTMテーブルを使用して署名者を追跡します。私が定義するUserクラスのために

...

has_many :created_petitions, :class_name => 'Petition', :foreign_key => 'creator_id' 
    has_and_belongs_to_many :signed_petitions, :class_name => 'Petition', :association_foreign_key => 'signer_id'  

そして、私が定義する請願クラスの...

belongs_to :creator, :class_name => 'User' 
    has_and_belongs_to_many :signers, :class_name => 'User', :foreign_key => 'signer_id' 

次に移行が...

だろう
create_table :petitions_signers, :id => false do |t| 
    t.integer :petition_id 
    t.integer :signer_id 
end 

add_column :petitions, :creator_id, :integer 
+3

私は仲介テーブルに署名のような名前をつけてから、has_many:throughを使用して署名入りの嘆願書にユーザを接続します – DGM

+2

申請書に署名する行為(妥当と思われる署名日など)に追加データを添付する必要がある場合は、a:throughモデルを使用することも私の選択となります。しかし、他のデータを追跡する必要がない場合(そしてfenecが存在していなかった場合)、HABTMの関係がより効率的で高速なコードになると信じています。 –

+1

さて、あなたはそれについて話しました、それは署名日が非常に重要だと思います。私はあなたを助けてくれてありがとう – fenec

関連する問題