rom-rb / rom

Data mapping and persistence toolkit for Ruby
https://rom-rb.org
MIT License
2.08k stars 161 forks source link

AutoStruct does not respect type definitions for associations #581

Open cflipse opened 4 years ago

cflipse commented 4 years ago

When using auto_struct and a module definition, ROM is not respecting the configured types for an association.

schema(:articles, infer: true) do
  associations do
    belongs_to :profiles, as: :author, foreign_key: :author_id
  end
end

class Entities::Article < Entity      # entity itself inherits from ROM::Struct
  attribute :author,   ::Entities::Profile
end

ArticleRepository.new(rom).first.author.class
# => Entities::Author ... expect an Entities::Profile

reproduction script: https://gist.github.com/cflipse/947447e4c656b35d351ffb518df38d65

Directly mapping to the class via map_to will coerce the author field correctly.

wuarmin commented 1 year ago

@cflipse Adding struct_namespace Entities to the ArticleRepository solved the issue for me:

class Articles < ROM::Repository[:articles]
  struct_namespace Entities

  def list
    articles.combine(:author)
  end
end