3

Rails アプリに ActiveRecord モデルがあり、これを他の Ruby オブジェクトにマップしたいと考えています。これらのモデルは外部 API にヒットし、クラス間で変更される主なものはフィールド名といくつかの API 仕様です。以下の例では、Personを他の 2 つの 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));

オートマッパー wiki からhttps://github.com/AutoMapper/AutoMapper/wiki/Projection

4

1 に答える 1

3

これを行う宝石を知らないので、昨日まとめました-必要に応じて試してみてください-https://github.com/house9/simple_attribute_mapper

更新: バージョン 0.0.2 は、次のマッピングをサポートするようになりました

  • デフォルト (ソースとターゲットの一致する属性名)
  • 標準のソースからターゲットへの属性
  • ネストされたソースからターゲットへの属性
  • 複合 (ラムダ スタイル) ソースからターゲットへの属性
于 2012-12-24T17:45:21.383 に答える