2016-05-27 4 views
1

У меня есть модель матча с 2 игроками поля, которые имеют belongs_to ассоциацию с моделью пользователяСоздание/обновление ресурсов через Rails 5 API с ассоциацией

Модель

class Match < ApplicationRecord 

    belongs_to :player1, :class_name => 'User', :foreign_key => 'player1' 
    belongs_to :player2, :class_name => 'User', :foreign_key => 'player2' 

end 

При создании матча через API (используя запрос Postman POST) Я попытался передать user_id из игроков, но получил ошибку TypeMismatch, указав, что контроллер ожидает объект User, но получил Fixnum.

Глядя на этой линии:

@match = Match.new(match_params) 

ошибка имеет смысл, поэтому я изменил мой умолчанию подмости генерироваться контроллеры выглядеть вместо этого:

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 

Он работает, но решение кажется " безвкусный». Есть ли лучший способ передать значения контроллеру с ассоциацией belongs_to?

ответ

1

Не могли бы вы попробовать изменить свою foreign_key в модели соответствия от player1, player2 до player1_id, player2_id, соответственно, путем миграции баз данных. Потому что ваши ассоциации foreign_key и belongs_to одинаковы? Пожалуйста, дайте мне знать, работает ли это!

+0

И, конечно, пожалуйста ** обновите параметры, переданные из представлений на контроллер **, возможно, player1 на player1_id, player2 на player2_id. –

+0

Так очевидно в ретроспективе Спасибо, это отлично работало с конструкцией match_params по умолчанию – Augusto

Смежные вопросы