2011-12-05 7 views
0

私が作業しているプロジェクトでPadrinoを見ていて、理想的にはjsonとして送受信されているデータをサポートしたいと思っています。jsonデータのPadrinoモデル

しかし、POSTリクエスト(または他のリクエスト)からデータを取得し、データを処理するためのモデルごとにカスタムロジックを記述することなくそのデータをモデルに入れるための自動ヘルパーまたは機能が組み込まれているかどうかは疑問です?

ブログの例では、これを簡単に見てみましょうが、パラメータデータをPostモデルのinitilizerに渡しているように見えるので、すべてのことを魔法のように知っていると思います。その場合はPadrinoの機能性やActiveRecord(この例では使用していると思われるもの)となります。

私はActiveSupportを使ってエンコード/デコードを行うことができますが、これは生のオブジェクトを与えてくれます。これは厄介なようです。

既にこれを実行しているときに良いパターンや機能はありますか?

答えて

2

うん、あなたはprovidesを使用することができ、それぞれの応答オブジェクトは、to_jsonすなわち呼び出します。ここでは、特定のモデルを満たす醜いコードの例を

get :action, :provides => :json do 
    @colletion = MyCollection.all 
    render @collection # will call @collection.to_json 
end 

を。アカウントのモデルの記録12を更新することができるでしょう

attributes = { :name => "Foo", :category_id => 2 }.to_json 
http://localhost:3000/Account/12?attributes=#{attributes} 

:あなたのようなリクエストをPOST最後場合

# Gemfile 
gem 'json' # note that there are better and faster gems like yajl 

# controller 
post "/update/:model/:id", :provides => :json do 
    if %w(Account Post Category).include?(params[:model]) 
    klass = params[:model].constantize 
    klass.find(params[:id]) 
    klass.update_attributes(JSON.parse(params[:attributes])) 
    end 
end 

+0

ああ、これは質問の半分に答えて、私はto_jsonメソッドを使う必要はないと思っていましたが、必要ならばそこにActiveSupportを置くことができます。着信Jsonデータを対応するモデルにどのように取得しますか?それが私の主な関心事です。 – Grofit

+0

モデルのすべてのレコードを更新できる一般的な使用例を示すようにコードを更新しました。 – DAddYE