这是接收作为来自外部角的web应用的参数JSON:
{
"provincia": {
"id": 1,
"name": "Province"
},
"username": "tester",
"direccion": "new avenue 100",
"email": "nomail@mail.com"
}
这是我的控制器
def create
@seller = Seller.new(seller_params)
if @seller.save
render json: @seller, status: :created, location: @seller
else
puts @seller.errors.full_messages
render json: @seller.errors, status: :unprocessable_entity
end
end
这是seller_params
def seller_params
params.require(:seller).permit(:username, :direccion, :email, :provincia_id)
end
型号:卖家belongs_to的省报
服务器控制台输出错误完整的邮件
Provincia must exist
其中修改了Rails API中我应该做的,使其工作,并保存新的卖家? 提前致谢。
您permiting您的PARAMS控制器的方式是不正确的:
Rails的文档
你需要通过你的provincia_id在你的属性或允许要传递到控制器的属性
方法1:
{
"provincia_attributes": {
"id": 1,
"name": "Province"
},
"username": "tester",
"direccion": "new avenue 100",
"email": "nomail@mail.com"
}
SellersController.rb
def seller_params
params.require(:seller).permit(:username, :direccion, :email, provincia_attributes: [:id, :name])
end
2路
{
"provincia_id": "1"
"username": "tester",
"direccion": "new avenue 100",
"email": "nomail@mail.com"
}
SellersController.rb
def seller_params
params.require(:seller).permit(:username, :direccion, :email, :provincia_id)
end
尝试改变这样的PARAMS:
def seller_params
p = params.require(:seller).premit(:username, :direccion, :email).to_h
p[:seller][:provincia_id] = params[:seller][:provincia][:id]
p
end
这将添加缺少的协会“provincia_id”键。 我打电话to_h得到一个新的哈希值,因为我不喜欢变异原PARAMS和你已经permited您想要的值,使散列使用安全。