home_team_user_idとaway_team_user_idのそれぞれに、外部キーを使用してuser_idが割り当てられているゲームのリストがあります。外部キーを持つユーザーIDの代わりにユーザー名を表示
ゲームは両方のユーザーIDだけを格納しますが、現在はガーネットリストにあります。user_idの代わりにユーザー名を表示します。
ビューで直接間違っsollution:
<%= User.find(game.home_team_user_id).email %>
これは動作しますが、ユーザーが見つからない場合はエラーがスローされます。
このロジックをコントローラに移したいが、私は管理していないようだ。
ゲームCONTROLLER:
class GamesController < ApplicationController
before_action :authenticate_user!
def index
@games = Game.all
@home_team_username = User.select(:id, :username).find(game.home_user)
@away_team_username = User.select(:id, :username).find(game.away_user)
end
MODELS:
class User < ActiveRecord::Base
#RELATIONS SINGLE GAMES
has_many :home_games, class_name: 'Game', foreign_key: 'home_team_user_id'
has_many :away_games, class_name: 'Game', foreign_key: 'away_team_user_id'
end
class Game < ActiveRecord::Base
belongs_to :home_user, class_name: "User", foreign_key: "home_team_user_id"
belongs_to :away_user, class_name: "User", foreign_key: "away_team_user_id"
end
VIEW:
<% @games.each do |game|%>
<tbody>
<td><%= game.created_at.strftime("%d-%m-%Y - %Hh%M")%></td>
<% if game.home_score == game.away_score %>
<td style="background-color: #e67300"><%= @home_team_username.username %></td>
<td style="background-color: #e67300"><%= game.home_score %></td>
<% elsif game.home_score > game.away_score %>
<td style="background-color: #66ff33"><%= @home_team_username.username %></td>
<td style="background-color: #66ff33"><%= game.home_score %></td>
<% elsif game.home_score < game.away_score %>
<td style="background-color: #ff1a1a"><%= @home_team_username.username %></td>
<td style="background-color: #ff1a1a"><%= game.home_score %></td>
<% end %>
<td style="text-align: center">-</td>
<% if game.home_score == game.away_score %>
<td style="background-color: #e67300"><%= game.away_score %></td>
<td style="background-color: #e67300"><%= @away_team_username.username %></td>
<% elsif game.home_score < game.away_score %>
<td style="background-color: #66ff33"><%= game.away_score %></td>
<td style="background-color: #66ff33"><%= @away_team_username.username %></td>
<% elsif game.home_score > game.away_score %>
<td style="background-color: #ff1a1a"><%= game.away_score %></td>
<td style="background-color: #ff1a1a"><%= @away_team_username.username %></td>
<% end %>
私は、これは動作するはずだと思うが、それはエラーを示しています
undefined local variable or method `game' for
何らかの理由で、ビュー内のループからゲーム変数を使用できません。
これを達成する正しい方法は何ですか?
これは機能します!しかし、彼のIDがまだゲームリストに残っている間にユーザーが削除されても、それでもエラーになります。これで削除されたユーザーが表示されるはずです... –
これを処理するための回答が更新されました。 – IngoAlbers
Thxは人を割り当てます!これは素晴らしいです! –