家伙! 我正在寻找最佳方法,我将在下面进行描述。
有两种不同模式的页面。例如网格和列表模式。 两种模式都需要两种不同的表示。
所以,目前,我有一个路由操作和标记参数(类似于'预览')来检测需要应用的序列化程序。
我认为这不是最好的方法。 让我们想象一下。将来会有两种不同的视图模式。 所以,在某种程度上,我需要管理所有这些方式。
谢谢!
答案 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")
我希望这会有所帮助。感谢。