我正在创建一个由RESTful json控制器组成的rails 3后端。例如。控制器看起来像这样:
respond_to :json
def index
...
respond_with resources
end
...
这是由客户端上的jQuery使用的。一切都很好。
我的下一步是控制JSON,以便根据上下文不会序列化某些属性。例如。与仅具有读访问权限的人相比,资源所有者获得的财产数量更多。
我目前正倾向于Draper,并根据用户的角色为每个模型使用单独的装饰器。
我的问题是,这产生了很多样板。我目前也在使用cancan进行基于角色的授权。
有人能建议一种更好的方法来实现这个目标吗?
答案 0 :(得分:1)
我建议使用ActiveModel :: Serializer。见https://github.com/josevalim/active_model_serializers
为要公开的每个资源创建一个序列化程序。然后,您可以为每个模型分离序列化逻辑,轻松公开其他方法,并根据角色确定每个模型的范围。它适用于CanCan。
我喜欢这种语法,例如:
class MonkeySerializer < ActiveModel::Serializer
attributes :name, :mom, :weight
private
# use this for a custom attribute not on the model
def weight
monkey.weight_in_pounds
end
end