使用超级资源发布到Sinatra API

时间:2014-11-04 14:34:54

标签: ruby post sinatra

我在Sinatra中使用Roar(hal / JSON)构建了一个应用程序,现在我尝试将一个新项目从我的客户端发布到此API。

在我的Sinatra应用程序中,我有这样的路线:

get '/todos/new' do
  @pagetitle = 'New Todo'
  @todo = Todo.new
  @todo.extend(TodoRepresenter)
  @todo.to_json  
  erb :'todos/new'
end

post "/todos" do
  @todo = Todo.new(params[:todo])
  if @todo.save
    redirect "todos/#{@todo.id}"
  else
    erb :"todos/new"
  end
end

我的client.rb看起来像这样:

require 'hyperresource'
class ApiRequest < HyperResource

api = ApiRequest.new(root: 'http://127.0.0.1:9393',
                    headers: {'Accept' => 'application/vnd.http://127.0.0.1:9393.v1+json'})

api.post '/todos/new', { :title => "a"}

这不起作用。获得工作客户端的唯一方法是get函数:

require 'hyperresource'
class ApiRequest < HyperResource

api = ApiRequest.new(root: 'http://127.0.0.1:9393/todos/13',
                    headers: {'Accept' => 'application/vnd.http://127.0.0.1:9393.v1+json'})

todo = api.get
output = todo.body
puts output

我不知道如何解决这个问题,Github页面也没有告诉我。


我稍微更改了API:

get '/todos' do
 @pagetitle = 'New Todo'
 @todo = Todo.new
 erb :'todos/new'
end

post "/todos/new" do
 @todo = Todo.new(params[:todo])
 @todo.extend(TodoRepresenter)
 @todo.to_json    
 if @todo.save
   redirect "todos/#{@todo.id}"
 else
   erb :"todos/new"
 end
end

以及在我的客户中发布的方式:

todo = api.get.new_todo.post(title: "Test")

在我的API控制台中,我现在得到:

D, [2014-11-04T17:11:41.875218 #11111] DEBUG -- :   Todo Load (0.1ms)  SELECT  "todos".* FROM "todos"  WHERE "todos"."id" = ? LIMIT 1  [["id", 0]]
ActiveRecord::RecordNotFound - Couldn't find Todo with 'id'=new:

以及很多其他代码。

在我的客户端控制台中,我收到了很多代码,包含超级资源服务器错误和许多其他代码。

0 个答案:

没有答案