2

私のモデルには多対多の関係があり、コーチは多くのチームを指導でき、チームは複数のコーチ (アシスタント、ヘッドなど) を持つことができます。

Railsコンソールで、実行すると:

 @coach = Coach.joins(:teams).select("coaches.first_name, coaches.last_name, teams.team_level")

戻り値:

 => [#<Coach first_name: "john", last_name: "doe">] 

を返さないことに注意してください。したがって、ビューではteams.team_level使用できません@coach.team_level

私が行うと、次のよう.to_sqlに返されます:

=> "SELECT coaches.first_name, coaches.last_name, teams.team_level 
FROM `coaches` 
INNER JOIN `coach_teams` ON `coach_teams`.`coach_id` = `coaches`.`id` 
INNER JOIN `teams` ON `teams`.`id` = `coach_teams`.`team_id`

これは私が期待していることです...したがって、DBに対してこのクエリを実行すると、期待されるフィールドが取得されます。

ここで何が間違っているのですか/何が表示されないのですか? ご検討いただきありがとうございます。

4

2 に答える 2

1

モデルのメソッドを使用してCoachモデルを取得しますCoach

チームで結合を使用しているためteam_level、追加のクエリなしで値にアクセスできます。

于 2012-04-25T11:54:50.157 に答える
1

それは実際に良いです。コーチ モデルを要求すると、チーム モデルに参加します。

@coach.teams.team_levelしたがって、実際にはチーム レベルにアクセスするだけで済みます。

select はモデルのスキーマを変更することはできません。SQL から返された属性のみをフィルター処理できます。この方法では、ラウンドトリップとデータ転送が少なくて済みますが、構造は変更されていません。

于 2012-04-25T12:06:40.980 に答える