Rails Active Model序列化为一个操作应用不同序列化的最佳方法

时间:2017-09-22 06:44:36

标签: ruby-on-rails active-model-serializers

家伙! 我正在寻找最佳方法,我将在下面进行描述。

有两种不同模式的页面。例如网格和列表模式。 两种模式都需要两种不同的表示。

所以,目前,我有一个路由操作和标记参数(类似于'预览')来检测需要应用的序列化程序。

我认为这不是最好的方法。 让我们想象一下。将来会有两种不同的视图模式。 所以,在某种程度上,我需要管理所有这些方式。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用防护方式条件,甚至可以稍后将它们移动到单独的方法中。如果你怀疑,这是完全可以的。

serialize = SerializerOne if a
serialize = SerializerTwo if b
...
serialize = SerializerN if n

render json: result, each_serializer: serialize 

答案 1 :(得分:0)

我希望您可以使用const_get通过遵循一个简单的约定来动态加载您想要的序列化程序类。

考虑您可能有两个模式和网格序列化器。在名为Mode的相同名称空间下创建这些,如

serializers / mode / grid_serializer.rb(Mode :: GridSerializer)
串行器/模式/ list_serializer.rb(模式:: ListSerializer)

在控制器操作中,您会收到参数预览值"grid",您可以通过

加载序列化程序类
serializer = Mode.const_get(params["preview"].camelcase + "Serializer")

我希望这会有所帮助。感谢。