2011-07-14 84 views
0

只是在这里非常基本。我试图发布一个activeResource作为Json并在另一侧恢复它。目前,我似乎能够发送JSON,但不能将其重新创建为我选择的对象。替代activeResource.save(红宝石)


我试过用手在Ruby中用Json生成一个post请求。

有两部分需要注意:客户端的活动资源和处理传入请求的控制器。错误通常降低到406(请求不可接受)或422(不可处理实体) 我想基本问题是我该如何解决这些问题?

这是我的活动资源类。

class UserRequest < ActiveResource::Base 
    self.site = "http://localhost:3008" 
    self.format = :json 
    #do not define defs as 'self'.whatever 


    def post_me 
    res = Net::HTTP.post_form(URI.parse('http://127.0.0.1:3008/user_requests.xml'), 
           {'url' =>'www.stackoverflow.com', 'depth' => '50'}) 
    end 
end 
#Just to clarify. If im sending Json, I change the URI to .json and If I'm using xml, I #remove the self.format because active resource is XML by default 

这里是控制器中的行,将其变为活动记录。控制器名为UserRequestsController

def add_request 
    @user_request = UserRequest.new(params[:user_request]) 
. 
. 
. end 

路线

match '/user_requests(.:format)' => 'user_requests#add_request', :via =>:post 

现在摆几件事情每个人脸上的手掌和我发疯。

我知道在def for add_request中我缺少JSON.parse。这是因为当我包含它时,服务器端会出现500和未初始化的常量错误。宝石是绝对安装的,我不是唯一一个有这个问题的人,但可惜没有修复。

http://railsforum.com/viewtopic.php?id=4654 http://railsforum.com/viewtopic.php?id=28301

所以那里有一个问题是如何解决的解析,这样它的作品我想为我假设的方式406是因为它接收Json而不是发送它。 这将是理想但是如果它不能够或者有人能想出一个理由,为什么我应该使用XML,那么也许他们能在这看看,并告诉我,为什么我可能会得到它在服务器端

Started POST "/user_requests.xml" for 127.0.0.1 at Thu Jul 14 09:38:34 +0100 2011 
    Processing by UserRequestsController#add_request as XML 
    Parameters: {"depth"=>"50", "url"=>"www.stackoverflow.com"} 
    SQL (0.2ms) SELECT 1 FROM "user_requests" WHERE ("user_requests"."url" IS NULL) LIMIT 1 
Completed 422 Unprocessable Entity in 18ms (Views: 3.9ms | ActiveRecord: 0.2ms) 

只是最后一件事是我不使用.save是因为我的实习生计划的领导不喜欢,并说它不适合目的。

+0

我刚刚在那里试过的东西。使用user_request.json发布,并且在控制器端不包含JSON.parse给出了相同的无法处理的实体问题 – overtone

+0

如果您使用'JSON.parse'(或任何其他方法的'JSON'),则必须将JSON标准库加载到'要求'json'。 – Koraktor

+0

@Koraktor我把宝石json放在gemfile中。要求json似乎给文件找不到。如果Json.parse工作,我仍然会得到422而不是406 – overtone

回答

0

我有类似的问题。尝试修改你的“add_request”方法是这样的:

def add_request 
    @user_request = UserRequest.new(params[:user_request]) 
    format.json { render :json => @user_request, :status => :created, :location => @user_request } 
end 
+0

我的朋友已经有了一堆格式,不幸的是他们被我的例子截掉了。最后,它变成了:user_request参数。我应该手动传递值。所以:myint,:myString。尽管如此,你可以获得最高分。 – overtone