我正在使用ActiveModel::Serializers构建 API 。使用参数有条件地侧载数据的最佳方法是什么?
所以我可以提出如下要求GET /api/customers
:
"customers": {
"first_name": "Bill",
"last_name": "Gates"
}
和GET /api/customers?embed=address,note
"customers": {
"first_name": "Bill",
"last_name": "Gates"
},
"address: {
"street": "abc"
},
"note": {
"body": "Banned"
}
类似的东西取决于参数。我知道 ActiveModel::Serializers 有include_[ASSOCIATION]?
语法,但我怎样才能从我的控制器有效地使用它?
这是我目前的解决方案,但它并不整洁:
customer_serializer.rb:
def include_address?
!options[:embed].nil? && options[:embed].include?(:address)
end
application_controller.rb:
def embed_resources(resources = [])
params[:embed].split(',').map { |x| resources << x.to_sym } if params[:embed]
resources
end
客户控制器.rb:
def show
respond_with @customer, embed: embed_resources
end
必须是更简单的方法吗?