在rails AMS中定义多个属性

时间:2016-02-11 15:40:20

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

我有组织序列化程序如下:

class OrganizationSerializer < ActiveModel::Serializer
  attributes :user_first_name, 
             :user_last_name,
             :user_email

  has_many :user

  def user_first_name
    object.user.first_name
  end

  def user_last_name
    object.user.last_name
  end

  def user_email
    object.user.email
  end

end

我的问题是,有没有更好的方法不为每个属性定义重复def user _...?

1 个答案:

答案 0 :(得分:0)

在我看来,最好的做法是像下面的代码段那样做:

has_many :users, each_serializer: YourUserSerializer

另一种选择是:

attributes :users

def users
  ActiveModel::ArraySerializer.new(object.users, each_serializer: YourUserSerializer)
end

这允许您在JSON响应中返回一组对象,并且还可以选择序列化它们。

如果您不希望序列化用户(似乎您想要,并且确实适合),请将false传递给each_serializer选项。

上述任何一种解决方案都会产生类似的结果(我填补空白):

{
  "organization": {
    "users": [{
      "first_name": "John",
      "last_name": "Doe",
      "email": "johndoe@gmail.com"
    }]
  }
}