通过 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 关联相同?请让我知道它是否有效!
我有一个包含 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 关联相同?请让我知道它是否有效!