autocomplete_source 需要一个数组或 URL,调用该数组或 URL 时会返回 JSON 以及与查询匹配的结果。http://api.jqueryui.com/autocomplete/#option-source http://api.jqueryui.com/autocomplete/#option-source
现在你有
<%= f.input :user_name, as: :search, data:
{autocomplete_source: User.pluck(:name)} %>
那可能会返回一个 JavaScript 字符串。所以你可以把它改成这样:
<%= f.input :user_name, as: :search, data:
{autocomplete_source: User.pluck(:name).to_json} %>
然后在设置自动完成时解析该 JSON:
jQuery ->
$('#task_user_name').autocomplete
source: JSON.parse($('#task_user_name').data('autocomplete-source'))
但从长远来看(当您有很多用户时),这将显着影响页面的加载时间。您实际上应该遵循该railscast 并将URL 作为自动完成源:
<%= f.input :user_name, as: :search, data:
{autocomplete_source: users_path} %>
确保将 json 渲染路径添加到用户控制器上的索引操作中。
如果您的索引操作也用于其他用途,您可以使用respond_to
:
# users_controller
def index
@users = User.order(:name)
@users = @users.where("name like ?", "%#{params[:term]}%") if params[:term]
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @users.map(&:name) }
end
end