ich ein Spiel-Modell mit 2 Spielern Felder haben, die eine belongs_to Verbindung mit dem User-Modellerstellen/aktualisieren Ressourcen über Rails 5 API mit Verein
Modell
class Match < ApplicationRecord
belongs_to :player1, :class_name => 'User', :foreign_key => 'player1'
belongs_to :player2, :class_name => 'User', :foreign_key => 'player2'
end
haben, wenn eine Übereinstimmung über die API zu schaffen (mit einer Postman POST-Anfrage) Ich habe versucht, die user_id der Spieler übergeben, aber einen TypeMismatch Fehler erhalten, der angibt, dass der Controller ein User-Objekt erwartet, aber eine Fixnum bekommen hat.
in dieser Zeile der Suche:
@match = Match.new(match_params)
der Fehler macht Sinn, so bearbeiten ich mein Standard-Gerüst erzeugt Controller wie diese Stelle aussehen:
def create
@match = Match.new
@match.player1 = User.find(params[:match][:player1])
@match.player2 = User.find(params[:match][:player2])
if @match.save
render json: @match, status: :created, location: @match
else
render json: @match.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /matches/1
def update
if @match.update(:player1 => User.find(params[:match][:player1]),
:player2 => User.find(params[:match][:player2])
)
render json: @match
else
render json: @match.errors, status: :unprocessable_entity
end
end
Es funktioniert, aber die Lösung scheint " unelegant". Gibt es eine bessere Möglichkeit, Werte an einen Controller mit einer assignes_to-Zuordnung zu übergeben?
Und natürlich, bitte ** update die Parameter von Ansichten zu Controller **, wahrscheinlich player1 zu player1_id, player2 zu player2_id übergeben. –
Im Nachhinein so offensichtlich Danke, das funktionierte perfekt mit dem Standard-Konstrukt match_params – Augusto