有没有办法在Ruby中的对象之间轻松映射?

时间:2012-12-22 19:18:42

标签: c# ruby-on-rails ruby automapper

我的rails应用程序中有一个ActiveRecord模型,我想将其映射到其他一些Ruby对象。这些模型将击中外部api,类之间的主要变化是字段名称和一些api细节。在下面的示例中, Person 需要映射到其他两个Api特定类。

class Person
    include Virtus

    attribute :first_name, String
    attribute :last_name, String
    attribute :gender, String
end

class PersonApi1
    include Virtus

    attribute :forename, String
    attribute :surname, String
    attribute :gender, String
end

class PersonApi2
    include Virtus

    attribute :firstname, String
    attribute :secondname, String
    attribute :gender, String
end

是否有可用于此类映射的映射gem?有没有其他人遇到类似的映射问题,你是如何接近它的?

如果我要自己动手,我会考虑使用某种哈希来绘制每个字段。

.net世界有Automapper,你可以在下面说出类似的内容。 Ruby中有类似的东西吗?

public class CalendarEvent
{
    public DateTime Date { get; set; }
    public string Title { get; set; }
}

public class CalendarEventForm
{
    public DateTime EventDate { get; set; }
    public int EventHour { get; set; }
    public int EventMinute { get; set; }
    public string Title { get; set; }
}

//AutoMapper mapping

Mapper.CreateMap<CalendarEvent, CalendarEventForm>()
    .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.EventDate.Date))
    .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.EventDate.Hour))
    .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.EventDate.Minute));

来自automapper wiki https://github.com/AutoMapper/AutoMapper/wiki/Projection

1 个答案:

答案 0 :(得分:3)

我不知道有没有这样做的宝石,所以我昨天把它放在一起 - 如果你想要试一试 - https://github.com/house9/simple_attribute_mapper

更新:版本0.0.2现在支持以下映射

  • 默认(源和目标匹配属性名称)
  • 目标属性的标准来源
  • 嵌套源到目标属性
  • 复合(lambda样式)源到目标属性