2011-07-14 86 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