1

ご覧いただきありがとうございます!

Depotの本とレールのチュートリアルを読み、両方を使って作業した後、最初の「自分で」アプリを作成しています。私の現在の実践プロジェクトには非常に多くの団体が存在するため、協会をうまく機能させるのは難しいと感じています。概要は次のとおりです。基本的にはシンプルなNFLピッケムアプリです。

「ユーザー」がログイン(考案)し、今週の「ゲーム」のリストが表示されます。(たとえば、NFLゲームとしましょう)。
「ユーザー」は、最初の画面が表示されたゲームの「ピック」を作成して、その週に送信できます。
「ゲーム」には2つのチームが関連付けられています。
「ゲーム」には「結果」があります(結果モデルを持っているか、ここのゲームテーブルの結果列を使用するだけで引き裂かれます)。「週」には、選択されたいくつかの「ゲーム」が含まれています。

ピックが行われた後、彼らは他のすべてのピックも見ることができますが、それはここでは実際には関係ありません。

上記のように、指定する必要のある関係がいくつかあり、それらすべてを解決するのに非常に苦労しています。また、それぞれに足場を作りたいと思っていましたが(私は正しいですか?)、ここではそれが正しい答えではないと思います。

また、一度解決したら、彼らと一緒に持っていくのに良い注文はありますか?この場合のように、「チーム」から始めて、それらの各週に「週」と「ゲーム」を追加できるようにすることをお勧めします。しかし、私は本当に迷子になり、圧倒されていると思います。この問題への取り組みを開始するためのヒントはありますか?助けてくれてありがとう!

(コードを見たい場合はお知らせください。ただし、これは「特定の問題の解決策を教えてください」という質問というよりも、プロセス/基本的な質問であると思います。ありがとうございます。

4

1 に答える 1

1

多くの場合、さまざまなオブジェクトをすべて分解してから、それぞれがどのように関連しているかを自問するのが便利です。あなたはすでにあなたが上で言ったことでそれをすべてやったので、それはそれをコードに翻訳するだけの問題です:

  • ユーザーが選択できるということは、ユーザーが選択することを意味しますhas_many
  • ピックはゲーム用であり、ゲームをピックすることを意味しbelongs_toます。
  • ゲームには2つのチーム(たとえば、ホームとアウェイ)があるため、ゲームにはbelongs_to2つの異なるチームがあります。
  • 1週間にはいくつかのゲームがあるので、1週間のhas_manyゲームです。

結果は関係または列のいずれかになり得るため、それはゲームのhas_one結果を意味します。

次に、他のモデルのこれらの関連付けを逆にする必要があります。一方の端のAhas_oneは、もう一方の端を意味しbelongs_toます。一方の端のAは、もう一方の端のaまたはaをbelongs_to意味します。has_manyhas_one

belongs_to重要なのは、3つの異なる関連付け( 、、、has_manyおよびhas_one)と、それらがどのように英語に翻訳されるかを実際に理解することです。

結果は次のようになります。

class User < ActiveRecord::Base
  has_many :picks
end

class Pick < ActiveRecord::Base
  belongs_to :user
  belongs_to :game
end

class Game < ActiveRecord::Base
  has_many :picks
  belongs_to :home_team, :class_name => "Team"
  belongs_to :away_team, :class_name => "Team"
  belongs_to :week
  has_one :result
end

class Week < ActiveRecord::Base
  has_many :games
end

class Team < ActiveRecord::Base
  has_many :home_games, :class_name => "Game"
  has_many :away_games, :class_name => "Game"
end

class Result < ActiveRecord::Base
  belongs_to :game
end

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

于 2012-11-05T23:55:45.110 に答える