rails 2.x (应该是2.1) 以后加入了 forgery protection authentication 功能,所有 post 到 controller action 的表单需带有 authenticity_token 字段。 该字段由 form_for 自动生成附加到表单中,可以通过观察 rails 生成的表单可以看到。 auto_complete 插件默认使用 post 动作请求提示项,但并不会附加该 authenticity_token,因此会产生错误,比较简便的解决方案就是把 text_field_with_auto_complete 请求动作更改为 get

  1. 安装 auto_complete plugin
1
2
cd /path/to/railsapp
ruby script/plugin install git://github.com/rails/auto_complete.git
  1. controller 添加代码
1
2
3
class MyController < ApplicationController
  auto_complete_for :model, :field
end
  1. view 添加代码
1
2
<%= javascript_include_tag :defaults %>
<%= text_field_with_auto_complete :model, :field, {:value => 'default text'}, **{:method => :get}** %>

需指定 method 为 get 自动完成功能才能正常工作, 否则默认的 post 动作会通不过 rails 的 forgery protection 校验