DRY AR models


I need an advice :wink:

Assuming you have a form like: Father's kids: <%= in_place_editor_field %> Mother's kids: <%= in_place_editor_field %>

with just a Person model.

You want your customers to write directly: Father's kids: mike,dave,chad Mother's kids: david

I think a proper method to do this is: 1/ Create Father < Person and Mother < Person models 2/ Create in those models accessors:   def kids=(value)     value.split(',').each do |kid|       child = Person.find_by_name(kid)       child.nil? Person.create(:name => kid, :parent_id => self.id) : child.parent_id = self.id     end     self.save   end

  def kids     # find etc.   end 3/ Simply put @father_kids & @mother_kids in your controller

But that's not DRY at all. So to improve this code, we could simply put in a 'lib/people.rb' file:   @people = ['father','mother']   @people.each do |parent|   # define_method("#{kids=}") etc.   end

and require the file in our models. Actually, it's what I have done in my project, and it works (hope you don't find this ugly :)).

My question is: that not DRY enough. I mean, if you want to add an: Sister's kids: etc. You'll need to generate a model, require the same files etc.

So, is it 'recommended' ('authorized', is it proper code?) to add Classes on-the-file to AR? I mean, not to write Father.rb, Mother.rb but just create a load_classes.rb (required in boot.rb I suppose) which define_class (oops, Index of Files, Classes & Methods in Ruby 3.1.2 (Ruby 3.1.2) returns me a define_class (WIN32COMGen)<-- ?!) after AR has reconized the Person model.

Actually, you can do it with a rake file but you need to regenerate it whenever you change your @people array.

Thanks for your replies.