我有一个有两个玩家场的匹配模型,它与用户模型有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请求),我尝试传递播放机的user_id,但是得到了一个TypeMismatch错误,指示控制器期望一个用户对象,但得到一个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关联的控制器?
发布于 2016-05-27 07:24:14
请您尝试通过数据库迁移将匹配模型中的foreign_key分别从player1, player2更改为player1_id, player2_id。因为您的foreign_key和belongs_to关联是相同的?请让我知道它是否有效!
https://stackoverflow.com/questions/37476928
复制相似问题