0

「チップ」モデルと「チーム」モデルがあります。ユーザーがいくつかのゲームから優勝チームを選択するフォームを作成しようとしています。これまでのところ、ユーザーは勝者のチームを選択でき、それらのIDはTipモデル(team_id)の外部キーとして保存されています。しかし、保存した後、私は(たとえば)@tip.team.nameに行くことができません。私は何をする必要がありますか?どうすれば関連付けることができますか(外国のキーが設定されている場合、レールは魔法のようにそれを行う可能性があります)、私はレールに非常に慣れていません。助けてくれてありがとう!

class Tip < ActiveRecord::Base
attr_accessible :user_id, :team_id, :team, :game_id, :game, :comp, :comp_id
belongs_to   :game
belongs_to   :comp
belongs_to   :team
end

class Team < ActiveRecord::Base
attr_accessible :name
has_many   :tips
end

def create
params['game'][0].each do |key, value|
    @tip = Tip.new
    @tip.team_id = value
    @tip.game_id = key
    @tip.save
end

この最後の方法も面倒かもしれませんが、他にどのように行うかはわかりません。1つのフォームで作成したいいくつかの「ヒント」があります。

編集:明確にするために、私はそれが1対多の関係であると確信しています。私は1つのフォームでいくつかのヒントを作成していますが、各ヒントは1つのチームにのみ関連しています。

編集:実際、私のアプローチ(これは最善の方法に近いとは言えませんが、tip.team.nameを許可しました。テストデータに関連するばかげたエラーで、他のことを考えさせられました。

4

2 に答える 2

2

本当に必要なのは、has_many throughリレーションを使用して、ヒントとチームをリンクすることです。これは、1つのヒントに多くのチームが含まれる可能性があるだけでなく、1つのチームに多くのヒントが含まれる可能性があるためです。これを行うには、TeamsTipsという名前の3番目のテーブルを作成する必要があります。設定方法は次のとおりです。

class Tip < ActiveRecord::Base
  has_many :teams_tip
  has_many :teams, :through => :teams_tip
end

class TeamsTip < ActiveRecord::Base
  belongs_to: teams
  belongs_to: tips
end

class Team < ActiveRecord::Base
  has_many :teams_tip
  has_many :tips, :through => :teams_tip
end

これで、@ tipがある場合、@tip.teamsを使用してそのすべてのチームを見つけることができます。これは配列になるため、最初のチームに@tip.teams[0]を使用することを忘れないでください。同様に、@ teamがある場合は、@team.tipsを使用してそのためのすべてのヒントを入手できます。

アソシエーションを介してこのhas_manyを設定する方法の詳細については、アクティブレコードアソシエーションのガイドを参照してください。

于 2012-10-07T04:06:57.273 に答える
1

アソシエーションが「ヒントはチームに属している」および「チームは多くのヒントを持つことができる」である場合、質問で定義されている関連付けuは正しいです。

チームの作成時に複数のヒントを作成したい場合、またはすでに作成されたチームのヒントを追加/編集/削除したい場合は、「accepts_nested_attributes_for」とhttps://github.com/ryanb/nested_formをご覧ください。

「@team.name」を使用してチーム名を取得できる場合は、「@tip.team.name」を使用して取得する必要があります

于 2012-10-07T05:17:24.990 に答える