Pat Shaughnessy

Ribadesella, Spain

Repeated auto complete plugin usage change

June 14, 2009 · 4 comments

I’ve forked the auto_complete plugin to support repeated text fields in a complex form; see http://patshaughnessy.net/repeated_auto_complete for more details.

If you had downloaded my plugin in the past, I’ve just made a couple of changes that will require some simple code changes to your app:

  • You no longer need to or are able to use “auto_complete_form_for” or “auto_complete_fields_for.” I decided this was confusing and unnecessary. Now my plugin just mixes the text_field_with_auto_complete method right into the standard FormBuilder class. Just use form_for or fields_for as usual.
  • I also dropped the object name parameter from text_field_with_auto_complete. Since text_field_with_auto_complete is a method of the form builder, the target object is indicated by the surrounding call to fields_for or form_for and so doesn’t need to be repeated. Now using form.text_field_with_auto_complete is very similar to using form.text_field or the other form builder methods: you just need to specify the column/field name.

So if you are using my old plugin with a Rails 2.2 or earlier app like this:

<% for person in @group.people %>
  <% auto_complete_fields_for "group[person_attributes][]", person do |form| %>
    Person <%= person_form.label :name %><br />
    <%= form.text_field_with_auto_complete :person, :name, {},
                                           {:method => :get}  %>
  <% end %>
<% end %>

… you should drop “auto_complete_” and “:person” and just use code like this instead:

<% for person in @group.people %>
  <% fields_for "group[person_attributes][]", person do |form| %>
    Person <%= person_form.label :name %><br />
    <%= form.text_field_with_auto_complete :name, {},
                                           {:method => :get}  %>
  <% end %>
<% end %>

And if you have Rails 2.3 or later and are using nested attributes, this would become:

<% form_for @group do |group_form| -%>
  <% group_form.fields_for :people do |person_form| %>
    Person <%= person_form.label :name %><br />
    <%= person_form.text_field_with_auto_complete :name, {},
          { :method => :get, :skip_style => true } %>
  <% end %>
<% end %>

Tags:

4 responses so far ↓

  • 1 Mike Wicks // Feb 26, 2010 at 12:34 PM

    Pat - Great plug-in/gem/thingy! I'm using it to get repeated auto completing fields to work on my forms, however, can I suggest you include this fix in your work - I spent a fruitless afternoon working out that your gem broke some of my existing code in the end, before I applied the fix http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/dafe061b0a4e1c5c/3d11d8a0e30bde49?lnk=raot&pli=1 Great Stuff! MW
  • 2 pat // Feb 27, 2010 at 09:44 AM

    Hey thanks a lot for trying my gem; sorry you had to waste an afternoon on this issue! I really appreciate knowing about this auto_complete_result fix… thanks for the heads up. It looks good and I’ll merge it into my version after writing a couple of tests for this behavior. Probably the reason the original auto_complete plugin calls the field and not the method is that the “auto_complete_for” helper method performs an actual SQL query to get the entries (see my article Getting started with Ruby metaprogramming for more info.) But changing auto_complete_result makes sense because probably a lot of people are using auto_complete_result but not auto_complete_for.

  • 3 Alfo // Apr 14, 2010 at 08:21 PM

    Hi pat, thanks for the plugin and tutorial. I’m having some problems, I did ryan’s complex forms tu torial and then used your plugin for autocomplete.. but when I add a 4th, 5th…. 10th TASK the autocomplete dosen’t work for these lines.. What am I missing???.

    thanks

  • 4 pat // Apr 14, 2010 at 09:04 PM

    Hi - getting the complex form sample to work with autocomplete is actually a bit tricky. The problem has to do with the javascript involved and how to generate/preserve the unique id’s my plugin adds to the autocomplete fields.

    I wrote a couple of articles that might help you with this: How does the complex-form-examples sample app work? and Scaffolding for auto complete on a complex, nested form.

    If these two posts don’t help you, feel free to send me some of your code on pastie.org or in email and I’ll try to give you some specific suggestions.

Leave a Comment