2016-05-27 7 views
1

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?

Antwort

1

Können Sie bitte versuchen, den Fremdschlüssel im Match-Modell von player1, player2 zu player1_id, player2_id über Datenbankmigrationen zu ändern. Weil Ihre Foreign_key- und Associates_to-Verknüpfungen gleich sind? Bitte lassen Sie mich wissen, ob es funktioniert!

+0

Und natürlich, bitte ** update die Parameter von Ansichten zu Controller **, wahrscheinlich player1 zu player1_id, player2 zu player2_id übergeben. –

+0

Im Nachhinein so offensichtlich Danke, das funktionierte perfekt mit dem Standard-Konstrukt match_params – Augusto

Verwandte Themen