I’ve been searching for a way to get DHH’s auto_complete plugin to
work with Ryan B.’ complex forms. All I could find was people
asking the same question, but no solutions so I decided to try it
myself. I don’t know if this id the best way to do it, but the
solution was to monkey patch ActionView::FormHelper and FormBuilder
which I put in a seperate file in the /lib folder of my project.
Here’s the code:
lib/auto_complete_form_helper.rb
module ActionView
module Helpers
module FormHelper
def text_field_with_auto_complete_mod(object, method,
tag_options = {}, completion_options = {})
sanitized_object = object.gsub(/][|[^-a-zA-Z0-9:.]/, “").sub
(/$/, “”)
sanitized_method = method.to_s.sub(/?$/,”")
(completion_options[:skip_style] ? “” :
auto_complete_stylesheet) +
text_field(object, method, tag_options) +
content_tag(“div”, “”, :id => “#{sanitized_object}#
{sanitized_method}auto_complete", :class => “auto_complete”) +
auto_complete_field("#{sanitized_object}#{sanitized_method}",
{ :url => { :action => "auto_complete_for#{sanitized_object}_#
{sanitized_method}” } }.update(completion_options))
end
end
class FormBuilder
def text_field_with_auto_complete(method, tag_options = {},
completion_options = {})
@template.text_field_with_auto_complete_mod(@object_name,
method,
objectify_options(tag_options), completion_options)
end
end
end
end
Don’t forget to include the file in your environment.rb of course. I
know some people were looking for a way to get this to work, so I
thought it might be helpful if I post it on the mailing list. If you
see any bugs or know of a better way, please let me know.