我一直在看Padrino正在进行的项目,这似乎非常合适,因为我理想的是希望支持以json的形式发送和接收的数据。
但是我想知道是否有内置的自动助手或功能来从后请求(或其他请求)中获取数据并将该数据放入模型中而无需为每个模型编写自定义逻辑来处理数据?
在博客示例中,他们简要地略过了这一点,但似乎只是将参数数据传递到他们的Post模型的启动器中,让我假设它只是神奇地知道如何处理所有事情......不确定这是不是case,如果是的话,它是Padrino的功能还是ActiveRecord(就像它们在示例中看起来那样)。
我知道我可以使用ActiveSupport进行基于JSON的编码/解码,但这只是给我一个原始对象,并且由于每个模型的存储问题都在主模型类中,我需要使用mixin或其他东西来实现这一点,这看起来很讨厌。
这样做有没有好的模式/功能呢?
答案 0 :(得分: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
最后,如果你发布一个请求,如:
attributes = { :name => "Foo", :category_id => 2 }.to_json
http://localhost:3000/Account/12?attributes=#{attributes}
您将能够更新帐户模型的记录12。