Overriding a Relationships Propertry

I have a child relationship that is denormalized. I want to normalize
it at the object level once it’s retrieved:

class Parent
has_many :denormalized_children, :class_name=>‘Child’

def children
if @normalized_children.nil?
@normalized_children = []
denormalized_children.group_by(&:number).each { |c|
@normalized_children << NormalizedChild.new©
}
end
@normalized_children
end
end

This works fine, but I don’t want to eager load them
as :denormalized_children. I’d like to use :children. So I tried:

class Parent
has_many :children

alias :denormalized_children :children
def children
#Same definition
end
end

AR doesn’t like this as it expects the children prop to return
something that responds to loaded.

has_many :children, :group=>‘number’

doesnt work either since it discards all but N unique numbers. So if
I have 10 with number 1 and 5 with number 2 I’ll only get back 2
children.

Is there any way to do this without having to change the name of the
relationship?

I can’t use after_load (or whatever it’s called) in the Child class
since the children need to be grouped by their relationship to their
parent.

Any suggestions would be great.

Thanks

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs