【问题标题】:Rails Active Model serialize best way to apply different serializes for one actionRails Active Model 序列化为一个动作应用不同序列化的最佳方法
【发布时间】:2017-09-22 06:44:35
【问题描述】:
伙计们!
我正在寻找这种情况的最佳方法,我将在下面进行描述。
页面有两种不同的模式。例如网格和列表模式。
两种模式都需要两种不同的表示。
所以,目前,我有一个路由操作和标志参数(类似于“预览”)来检测需要应用哪个序列化程序。
我想这不是最好的方法。
让我们想象一下。未来还会有两种不同的视图模式。
所以,在某种程度上,我需要管理所有这些方式。
谢谢!
【问题讨论】:
标签:
ruby-on-rails
active-model-serializers
【解决方案1】:
您可以使用保护样式条件,甚至稍后将它们移动到单独的方法中。如果您有疑问,那完全可以。
serialize = SerializerOne if a
serialize = SerializerTwo if b
...
serialize = SerializerN if n
render json: result, each_serializer: serialize
【解决方案2】:
我希望您可以使用const_get 执行此操作,通过遵循简单的约定来动态加载您想要的序列化程序类。
假设您可能有两个用于模式和网格的序列化程序。在名为 Mode 的同一命名空间下创建它们,例如
serializers/mode/grid_serializer.rb(Mode::GridSerializer)
serializer/mode/list_serializer.rb(Mode::ListSerializer)
在控制器操作中,您会收到参数预览值"grid",您可以通过执行加载序列化程序类
serializer = Mode.const_get(params["preview"].camelcase + "Serializer")
我希望这会有所帮助。谢谢。