Dynamic # of Attributes for a Model (key/val table) Get/Set?

I would start with creating some collection class, that will allow using indexers (or even through method_missing) to access product’s custom attributes. Something like that:

my_product.attrs[:size] or my_product.attrs.size

It is easy: instantiate collection class and pass product id to it. Then when you try to access some attributes, just do ProductAttr.find( yada yada ) to get attribute value.

After that you could think even further and implement custom attributes interception in Product’s method_missing (to allow my_product.size).