[Rails] Re: DRYing up helper
eval worked indeed.
Thanks again. The solution, as usual, was simpler than what I thought
it would be. :)
On Jan 17, 5:35 pm, Liam Morley <imo...@gmail.com> wrote:
> 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 lahttp://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.
>
> Liam
>
> On Jan 17, 1:49 pm, pepe <P...@BetterRPG.com> wrote:
>
> > Hi,
>
> > I'm trying to make a helper in my application DRYer. Here is an edited
> > version of the current relevant code:
>
> > module MyControllerHelper
> > PERSON_FIELDS = ['last_name', 'first_name']
> > ADDRESS_FIELDS = ['address_1', 'address_2', 'city', 'state', 'zip']
>
> > def get_errors_on(section)
> > errors = ''
>
> > @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}<br>" 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}<br>" 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.
>
> > Any ideas?
>
> > Thank you.
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home