2016-08-28 40 views
0

我有2个元素之间的关系。基本上,我有帖子&类别。Json串行器不同的json名称

在我的方法,我有2个控制器:

PostsControllerindex, show, update, destroy & *categories*

CategoriesControllerindex

当我想修改类,我做了POST/post/:post_id/categories。一切正常。但是我想回归的答案是我的帖子的类别,只是类别。所以,我这样做:

render json: @post.categories, 
     each_serializer: CategorySerializer 

它工作正常。但我收到的JSON的答案是:

posts: [{id:1, title:'Category 1'}, {id:2, title:'Category 2'}] 

但所需的输出应该是:

categories: [{id:1, title:'Category 1'}, {id:2, title:'Category 2'}] 

我如何改变呢?

回答

1

你可以试试这个:

categories = @post.categories.map { |c| CategorySerializer.new(c) } 
render json: { categories: categories } 
+0

我用这个作为指导。但我没有使用你的第一行。我只改变: from:'render json:@ post.categories' to:'render {categories:@ post.categories}' 我需要上一行理论上的东西吗?或者我可以使用我的解决方法吗? 非常感谢!有用!但我想知道第一行的原因(或者如果我可以使用解决方法没有问题)后标记为接受:) – joseglego

+0

第一行的原因是更改根键,从'@ post'变量, 默认。你也可以勾选['如何添加root密钥'](https://github.com/rails-api/active_model_serializers/blob/master/docs/howto/add_root_key.md#how-to-add-root-key)和['覆盖根密钥'](https://github.com/rails-api/active_model_serializers/blob/master/docs/general/rendering.md#overriding-the-root-key),但我发现更容易使用像我的回答中的黑客攻击。 –