@person.errors.each do |attr,msg|
case section
when 'person'
errors += "#{attr.humanize} #{msg}<br>" if
PERSON_FIELDS.include? attr
when ‘address’
errors += “#{attr.humanize} #{msg} ” if
ADDRESS_FIELDS.include? attr
end
end
errors
end # def get_errors_on(section)
end # module WizardHelper
I have tried different versions of the following but always
unsuccessfully: @person.errors.each do |attr,msg|
errors += “#{attr.humanize} #{msg} ” if (section.upcase +
‘_FIELDS’).constantize.include? attr
end
I always get a message saying that, for example, PERSON_FIELDS
constant has not been defined, although it is defined at the top of
the module.
pepe, you should be able to use eval(section.upcase + ‘_FIELDS’)
instead of constantize.
That being said, I can never suggest using eval unless I accompany
that with a warning, a la http://www.railsrocket.com/articles/the-controversial-eval-function.
Also, I always valued readability over being DRY. Being DRY in your
case might be useful if you can reasonably expect to have more than
just PERSON and ADDRESS fields. Otherwise, you might be sacrificing
readability without cause.
I tried to use eval but couldn’t make it work in my prior attempts.
I’ll give it a shot again.
About the readability of the code I agree with you, my priority is
always make my code easy to read, then make it DRY. I currently have a
total of 4 sections that I have to run this code for but based on what
I know I very possibly will need to run the code for many more
sections in the future. If I get this one working right it will be a
big help in the future, but when the code gets ‘obscure’ I always
leave extensive comments for my sanity and that of the person coming
behind.