2011-07-14 3 views
0

こちらは非常に基本的なものです。私は、JsonとしてactiveResourceをポストし、反対側でそれを回復しようとしています。現在、私はJSONを送ることができるようですが、私の選択したオブジェクトにそれを再作成しません。activeResource.save(Ruby)に替わる


私はRubyでJsonの投稿要求を生成する際に手を入れました。

クライアント側のアクティブリソースと着信要求を処理するコントローラの2つの部分があります。エラーは通常406(要求しない)または422(Unprocessable Entity)になります 基本的な質問はどうすればこれらを修正できますか?

ここは自分のアクティブなリソースクラスです。

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 

であると私に怒って行きます。

私はadd_requestのdefにJSON.parseがありません。これは、私がそれを含めると、サーバー側で500と初期化されていない一定のエラーが発生するためです。宝石は間違いなくインストールされていますが、私は問題を抱えていた唯一の人ではありませんが、残念ながら修正はありません。

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

のでtheresの一つの質問は、私が仮定しているとして、それは私がしたいように動作するように私はパースを修正すればよい方法です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) 

私のインターンプログラムのリードは好きではなく、目的に合わないと言っているので、私はセサブを使用していません。

+0

何か私はそこで試したことがあります。 user_request.jsonで投稿し、コントローラ側にJSON.parseを含めないで、同じ処理不可能なエンティティの問題が発生する – overtone

+0

'JSON.parse'(または' JSON'の他のメソッド)を使用する場合、JSON標準ライブラリをロードする必要があります'require 'json''。 – Koraktor

+0

@Koraktor私はgemfileにgem jsonを入れました。 jsonがファイルを見つけられないように見えるように要求する。 Json.parseがうまくいけば、私はまだ406の代わりに422を得るでしょう – 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 paramsであることが判明しました。私は値を手動で渡す必要があります。だから:myint、:myString。あなたはそれを発見するための最高得点を得る。 – overtone