2011-12-05 33 views
0

我一直在尋找Padrino來開發我正在開發的項目,它看起來非常適合,因爲我最好是想支持以json的形式發送和接收數據。json數據的Padrino模型

但是我想知道是否有任何內置的自動幫助程序或功能來從發佈請求(或其他請求)中獲取數據並將該數據放入模型中,而無需爲每個模型編寫自定義邏輯來處理數據?

在博客示例中,他們簡單地探討了這一點,但似乎只是將參數數據傳遞到他們的Post模型的initilizer中,讓我認爲它只是神奇地知道如何處理所有事情......不知道這是否這種情況,如果是這樣的話,那就是Padrino功能或者ActiveRecord(就像它們在這個例子中似乎使用的那樣)。

我知道我可以使用ActiveSupport進行基於JSON的編碼/解碼,但這只是給我一個原始對象,並且由於每個模型的存儲問題都駐留在主模型類中,所以我需要使用mixin或其他東西來實現這,這似乎很討厭。

這樣做有沒有什麼好的模式/功能?

回答

2

是的,你可以使用provides和每個響應對象將調用to_json即:

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

這裏的醜陋的代碼,填補某些型號的例子。

# 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 

最後,如果你喜歡POST請求:

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

您可以更新帳戶型號的紀錄12。

+0

啊好吧,這回答了一半的問題,我希望我不需要使用to_json方法,但如果需要,我可以將ActiveSupport放在那裏。你如何將Json數據傳入相應的模型?因爲這是我主要關心的問題。 – Grofit

+0

我更新了代碼以顯示一個通用用例,您可以在其中更新模型的所有記錄。 – DAddYE