在Ruby中是否有一种方法可以轻松地在对象之间进行映射?

本文关键字:对象 之间 映射 方法 是否 Ruby 一种 | 更新日期: 2023-09-27 17:49:30

我有一个ActiveRecord模型在我的rails应用程序,我想映射到其他一些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

在Ruby中是否有一种方法可以轻松地在对象之间进行映射?

我不知道有什么宝石能做到这一点,所以我昨天把一个放在一起-如果你想试试- https://github.com/house9/simple_attribute_mapper

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

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