Hello.
I am using auto-complete fields in my application and I found myself
duplicating a lot of code.
Here is a sample of what I have in my view:
            <%= text_field_with_auto_complete :model,
              :codeA,
              :maxlength    => 35,
              :size         => 35,
              :frequency    => 0,
              :style        => ''off'',
              :autocomplete => ''off'' -%>
            <div class=auto_complete id=model_codeA_auto_complete
style=''display: none''></div>
            <%= text_field_with_auto_complete :model,
              :codeB,
              :maxlength    => 35,
              :size         => 35,
              :frequency    => 0,
              :style        => ''off'',
              :autocomplete => ''off'' -%>
            <div class=auto_complete id=model_codeB_auto_complete
style=''display: none''></div>
The models all look the same too:
class ModelA < ActiveRecord::Base
  self.table_name = ''modela''
  def self.get_codes
    return ModelA.find(
      :all,
      :select => ''code'',
      :order  => ''code''
    ).collect {|row| row.code}
  end
end
class ModelB < ActiveRecord::Base
  self.table_name = ''modelb''
  def self.get_codes
    return ModelB.find(
      :all,
      :select => ''code'',
      :order  => ''code''
    ).collect {|row| row.code}
  end
end
:   :   :  and so on...
The only thing that changes in the methods is the name of the model,
as you can see.
In my controller I have another set of methods to retrieve the
necessary information for the drop downs and auto-completes:
  def auto_complete_for_codeA
    @codes = ModelA.get_codes
    render_options(@codes, params[:model][:codeA])
  end
  def auto_complete_for_codeB
    @codes  = ModelB.get_codes
    render_options(@codes, params[:model][:codeB])
  end
:   :   :  and so on...
''render_options'' is another method that I got DRY enough and I
don''t
need to make any changes as of right now. It finds matching values in
@codes based on the second parameter value, then renders a partial.
As you can see there is a lot of duplication in all of this and I
would like to make it as DRY as possible. The only thing I think can
be done is to to modify all those controller methods by soft-coding
somehow the name of the Model to be used and get something like this:
  def auto_complete_for_codeA
    render_options(:ModelA, params[:model][:codeA])
  end
  def auto_complete_for_codeB
    render_options(:ModelB, params[:model][:codeB])
  end
Then render_option would do all the grunt work converting :myModelx to
a usable model name. If you know how to make this happen and/or have
better ideas please let me know.
Thanks a lot.
Pepe
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---