2009-06-28 13 views
0

いくつかの個人的な開発のために単純なWebアプリケーションを作成しようとしていますが、私は障害にぶつかりました。私は働いているクラスを作成しましたが、関係をどのように定義するか、モデルが適切であるかどうかはわかりません。Ruby on Railsのオブジェクトと関係

引数のために、私はすでに存在で、次のクラスがあります。ユーザー、チーム、アスリート

を私がのために努力していた機能を追加することで、チームを作成するユーザーのためにあります1人のアスリートをチームオブジェクトに追加します。他のユーザーは、チームに選手を追加することも、チーム選手の既存のアスリートに選手を追加することもできます。本質的には、アスリートオブジェクトの配列をラップするために何らかの種類のクラスを作成したいと考えています。AthleteArrayと呼びます。でしょうhave- AthleteArray

  1. のでチーム持って、多くのだろうAthleteArrays
  2. :私の理解が正しければ

    、これらが適切であろう関係があります多くスポーツ選手となりますに属します a チーム

  3. 選手だろうユーザー属し-に、そしてだろう属し-にAthleteArray
  4. ユーザ多くの人がアスリートですが、それは彼らの関与の程度です。

AthleteArrayクラスは、属性を持っていませんので、それは(それは単にIDを持っているでしょう)のActiveRecordオブジェクトとして作成することが賢明でしょうか?このアイディアを実装する別の方法がありますか(アスリートオブジェクトの配列の配列を持つためにチームクラスを定義できますか?)私はRoRの知識はほとんど持っていませんが、Web開発を始めるには良い場所だと思いました。どんな助けもありがとう。前もって感謝します!

編集:アスリート、チーム、およびAthleteArraysの名前は重要ではありません。アスリートは基本的にはアスリートのリストに対して検証されたコメントであると仮定する。重複は許容されます。投稿された回答を理解している場合は、基本的に両親のIDを取得する中間クラスを作成する必要があります。

Omarへの返信です: 最終的に、私は投票システムを追加したいと思います。だから基本的なチームが作成された後、ユーザーは個々のプレイヤーの代替案を提案することができ、ユーザーは最良の選択肢に投票することができます。例えば、私が作成したchess_playersのチームを持っている場合:

  1. ボビー・フィッシャーを
  2. ガルリ・カスパロフ
  3. ウラジーミル・クラムニク

誰かがカスパロフをクリックすると、より良い選手があろうと決めるかもしれませんディープ・ブルーなので、このオプションはKasparovの下でネストされているように見えます。この同じプロセスはすべてのキャラクターで起こりますが、コメントシステムとは異なり、「ディープブルー」に反応して別のプレーヤーに代わることはできず、単にポジション番号2に応答し、別のプレーヤーを提案するだけです。

答えて

1

右のようなデータベースでこれを表現することができますので、私が正しく質問を理解している場合、またはそれを使用しない場合がありチームの選手の多くの可能な組み合わせがあるでしょうアスリート?

ここでは、モデルの名前付けに何か耳障りなことがあります。 AthleteArraysの臭いはあまり好きではありません。

has_many_throughなど、あなたのチームの選手にアクセスする必要があります。

has_many :athletes, :through => :team_permuations # your AthleteArray model 

ジョシュSusserは、私はあなたの仕様に応じて、理論的にはそれがチームの任意の数に所属するアスリートのために可能にすることができるので、何が必要だと思い、多くの団体には多くの古い検挙されています。私はあなたの多対多の関連で、自動的に作成された監査カラム(created/updated_at/on)を持つことができればいいと思います。あなたは私が間違った質問を理解していると思われる場合

http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off

はコメントしてください。

+0

私の質問を編集しました。今はもう少し理解できると思っています。レスポンスありがとう! – Grantismo

+0

変更に基づいて、チーム/選手の参加のモデルが必要だと思います。これは、通常のassoc_1_id、assoc_2_idテーブルよりもずっとスマートにする必要があり、チームや選手のテーブルではなく、他のフィールドを必要とするためです –

+0

助けてくれてありがとう、私はそれを試してみますそれが動作しない場合は戻ってきてください。 – Grantismo

1

私があなたの必要性を理解していれば、これはhas_many:throughを通して解決できるものです。

は基本的に、あなたは

athletes: 
    id 
    other_fields 

teams: 
    id 
    other_fields 

roster_items: 
    id 
    team_id 
    athlete_id 
    position 
    is_active #is currently on the team or just a suggestion 
    adding_user_id #the user who added this roster item 

class Athlete < ActiveRecord::Base 
    has_many :roster_items 
end 

class Team < ActiveRecord::Base 
    has_many :roster_items 
    has_many :athletes, :through => :roster_items 
end 

class RosterItem < ActiveRecord::Base 
    belongs_to :team 
    belongs_to :athlete 
    belongs_to :adding_user, :class_name => 'User' 
end