【发布时间】:2016-02-16 15:55:28
【问题描述】:
我正在尝试通过 ruby on rails 中的 curl 以 JSON 格式发送 POST 请求。我想知道如何在控制器中解析这个请求并将其保存在数据库中。我为玩家创建了控制器和模型。
下面是curl命令-
curl -i -X POST -H "Content-Type: application/json" "localhost:3000/app/v2/player" -d '{
"url": "app/v2/players.json",
"para": {
"player": {
"player_id": 51275,
"email": "test@gmail.com",
"total_won": "1890000.00",
"pr_costs": "29.00",
"payment_method": "VISA",
"games": [
{
"name": "AvsB",
"matches": 1,
"value": 1100,
"category": "Cricket",
"subcategory": "Test",
"tags": [
"Aus",
"Melbourne"
],
"game_id": 12
},
{
"name": "CvsD",
"matches": 1,
"value": 790,
"category": "Cricket",
"subcategory": "T20",
"tags": [
"T20",
"20over",
"worldcup"
],
"game_id": 7
}
]
}
}
}'
下面是我的播放器控制器-
module App
module V2
class PlayersController < ApplicationController
def create
@player = Player.new(params[[:para][:player][:player_id]].first)
if @player.save
render json: @player, status: 201, location: @player
else
render json: @player.errors, status: 422
end
end
private
def player_params
#params.require(:player).permit(:url, :player_id, :email, :total_won, :pr_costs, :payment_method)
params.fetch(:url,:para, {}).permit(:player_id, :email, :total_won, :pr_costs, :payment_method)
end
end
end
end
下面是我的播放器模型-
class Player < ActiveRecord::Base
has_many :games, dependent: :destroy
validates :player_id, presence: true
attr_accessor :url,:para
end
目前我在启动 curl 命令时遇到错误 -
TypeError (no implicit conversion of Symbol into Integer):
app/controllers/app/v2/players_controller.rb:21:in `[]'
app/controllers/app/v2/players_controller.rb:21:in `create'
任何关于我如何读取 JSON 数据并为创建函数和相关游戏中的玩家创建记录的指针将不胜感激。我没有为游戏创建模型,但它的结构类似于 JSON 数据。同样一个玩家有很多游戏,一个游戏将属于一个玩家。
提前致谢!
【问题讨论】:
-
为什么
params里多了一个[]试试params[:para][:player]
标签: ruby-on-rails json ruby-on-rails-4