【问题标题】:Rails Active Model Serializer Include ConcernsRails Active Model 序列化器包含问题
【发布时间】:2015-05-20 20:12:51
【问题描述】:

是否可以在序列化程序中包含代码?我有一些常用的方法,我只想包括而不是总是重复它们。

【问题讨论】:

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


    【解决方案1】:

    如果您正在寻找一些代码作为示例:

    1) 创建包含专门关注点的专门序列化程序

    # app/serializers/specialized_serializer.rb
    
    class SpecializedSerializer < DefaultSerializer
      include SpecializedConcern
      ...
    end
    

    2) 在新的关注文件夹中创建您的专业关注

    # app/serializers/concerns/specialized_concern.rb
    
    module SpecializedConcern
      extend ActiveSupport::Concern
    
      included do
        include SomeModule
        ...
      end
    
      def some_method
        ...
      end
    end
    

    3) 将新的序列化关注点文件夹添加到应用程序自动加载路径

    # config/application.rb
    ...
    config.autoload_paths += "#{config.root}/app/serializers/concerns"
    ...
    

    【讨论】:

    • 注意,在 Rails 6 中,您可以使用 config.eager_load_paths &lt;&lt; Rails.root.join("app/serializers/concerns") 将 serializers/concerns 目录添加到 config/application.rb 中的 eager_load_paths
    【解决方案2】:

    当然可以。使用关注点、ApplicationSerializer 或编写另一个类来共享行为应该没问题。

    【讨论】:

    • 你有在序列化器中使用关注点的例子吗?我尝试了很多不同的方法,但都以错误告终。
    • 我最终创建了一个名为 FormSerializer 的新类,它从 ActiveModel::Serializer 扩展而来,然后当我需要与表单相关的方法时,我让其他序列化程序从它扩展而来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2017-09-25
    相关资源
    最近更新 更多