通过 Rails 5 API 关联创建/更新资源

Create / Update Resources via Rails 5 API with association

我有一个包含 2 个玩家字段的匹配模型,这些字段与用户模型有 belongs_to 关联

型号

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 但出现类型不匹配错误,表明控制器需要用户对象,但得到了 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

有效,但解决方案似乎 "inelegant"。 有没有更好的方法将值传递给具有 belongs_to 关联的控制器?

能否尝试通过数据库迁移将 Match 模型中的 foreign_key 从 player1, player2 分别更改为 player1_id, player2_id。因为您的 foreign_key 和 belongs_to 关联相同?请让我知道它是否有效!