You can actually have the best of both worlds by using a remarkable Ruby feature called method_missing, which can be used to make model constants look like regular (and much quieter) object attributes. method_missing is beyond the scope of this book, but if your curiosity is piqued, a little web searching will no doubt lead you in the right direction.
If a method call can't be matched in the Smoke library giving a 'method_missing' error, first check that you are passing correct class instance that is properly initialized (with super method called in constructors of custom Qt classes descendants).
If a method call can't be matched in the Smoke library giving a 'method_missing' error, you can turn on debugging to trace the matching process:
'method_missing' which gets called whenever you try to access a method that the class doesn't actually have.
In my solution, the contents of the row are a hash in the CsvRow, and the method_missing implementation of the accessors is really just syntactic sugar hiding a key, value hash lookup.