ruby-on-rails - 使用 active_model_serializers 将方法应用于所有属性

标签 ruby-on-rails active-model-serializers rails-api serialization

使用 rails-api/active_model_serializers ,可以将一种方法应用于所有属性吗?

基本上,我想申请

object.zeroed_value(:symbol) 

到每个属性,而不必为每个属性编写单独的方法。见示例:

class NutritionalSerializer < ActiveModel::Serializer
  attributes :calories,
             :sodium

  def calories
    object.zeroed_value(:calories)
  end

  def sodium
    object.zeroed_value(:sodium)
  end

  # many, many more attributes...

end

最佳答案

我认为您可以使用元编程来生成您需要的所有方法,例如:

class NutritionalSerializer < ActiveModel::Serializer
  attributes :calories,
             :sodium

  %i{attr1 attr2 attr3}.each do |attr|
    define_method attr do
      object.zeroed_value(attr)
    end
  end
end

您也可以覆盖 attributes序列化器的方法,然后执行以下操作:
class NutritionalSerializer < ActiveModel::Serializer
  def attributes
    data = super
    %i{attr1 attr2 attr3}.each do |attr|
      data[attr] = object.zeroed_value(attr)
    end
    data
  end
end

关于ruby-on-rails - 使用 active_model_serializers 将方法应用于所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876628/

相关文章:

ruby-on-rails - 如何根据API响应显示登录页面

redis - Rails 5 API + 实时通知

ruby-on-rails - 如何处理 before_filter 中的无效 ID?

ruby-on-rails - RSPEC - 测试说对象为零,但在实践中工作正常

ruby-on-rails - 在Rails 2.x和3.x中对ActiveRecord进行“喜欢”查询吗?

ruby-on-rails - 带参数的事件模型序列化器?

ruby-on-rails - 查找具有关系记录的记录失败:PG::UndefinedTable: ERROR: missing FROM-clause entry for table

ruby-on-rails - Rails 中的 ORDER BY 和 DISTINCT ON (...)

ruby-on-rails - 将 has_many 添加到 ActiveModel::Serializer 的问题

ruby-on-rails - 序列化程序中的 ENOENT 错误