使用JSON API写入Rails

Are*_*rel 8 api json ruby-on-rails

我一直试图从POSTman写一个常规的模型rails应用程序几天,并且无法弄清楚如何做,或找到有关如何做的任何信息.

我的应用程序有一个带有名称字段的用户模型.我要做的就是使用POSTman通过JSON远程更改名称.

任何有关如何执行此操作的帮助都表示赞赏,包括指向如何执行此操作的基本资源的链接.

我想这是非常基本的.

编辑:这是POSTman输出的截图

在此输入图像描述

编辑2:

从服务器日志:

Started PUT "/users/1.json" for 127.0.0.1 at 2013-07-17 16:53:36 -0400
Processing by UsersController#update as JSON
  Parameters: {"name"=>"Jeff", "id"=>"1"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", "1"]]
   (0.1ms)  begin transaction
   (0.1ms)  commit transaction
Completed 204 No Content in 3ms (ActiveRecord: 0.4ms)
Run Code Online (Sandbox Code Playgroud)

交易正在进行,但记录实际上并未更新.我需要更改控制器中的某些内容吗?它只是一个常规的rails生成的控制器,没有任何变化.

编辑3:

这是我的输出 http://localhost:3000/users/1.json

{
"created_at": "2013-07-02T21:51:22Z",
"id": 1,
"name": "Arel",
"updated_at": "2013-07-02T21:51:22Z"
}
Run Code Online (Sandbox Code Playgroud)

再一次,我没有从脚手架中做任何改变,而且我还没有弄清楚如何格式化JSON以将其嵌套在用户之下,就像答案所暗示的那样.

这是我的控制器的相关部分:

# GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end

# PUT /users/1
  # PUT /users/1.json
  def update
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json {  }
      else
        format.html { render action: "edit" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这么难.我只是想通过JSON更新名称...

Jes*_*ott 5

对于要发布到的控制器:

protect_from_forgery with: :null_session
Run Code Online (Sandbox Code Playgroud)

或者来自:如何绕过Rails 3中的protect_from_forgery获取Facebook画布应用程序?

skip_before_filter :verify_authenticity_token, :only => [THE ACTION]
Run Code Online (Sandbox Code Playgroud)

编辑

您的JSON不正确...您正在发帖

{"name"=>"Jeff", "id"=>"1"}
Run Code Online (Sandbox Code Playgroud)

由于您的控制器user.update_attribute(params[:user]),您的JSON需要在用户属性下

{
    "id": 1,
    "user": {
        "name": "Jeff"
    }
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个散列

{"user"=>{"name"=>"Jeff"}, "id"=>"1"}
Run Code Online (Sandbox Code Playgroud)