0

我想在我的搜索栏中添加自动完成功能。但是当我提交完整的用户时,我得到了这个 url:

/users?utf8=✓&search=Thomas

代替/users/23

我的控制器

@users = User.find(:all, :select=>'name').map(&:name)

Javascript

 <%= javascript_tag "var autocomplete_items = #{ @users };" %>

 <script type="text/javascript">
            jQuery(document).ready(function() {
                $('#auto_complete').typeahead({source: autocomplete_items});
            });
 </script>

我的表格

<%= form_tag users_path, :method => :get do %>
  <%= text_field_tag :search, params[:search], :id => "auto_complete" %>
<% end %>

谢谢你的帮助

4

1 回答 1

0

从我可以从 Bootstrap 文档中收集到的信息,typeahead它只是为了做到这一点而设计的——在文本之前输入。它只接受您的输入,查看其源中是否有与输入匹配的内容,并提供一些替代方法来完成输入。如果用户选择了一个替代项,typeahead 将填充选定的字符串。

所以你唯一得到的是输入字段中的一个字符串。

Typeahead 不知道如何构建您需要的链接:/uses/23

如果 Bootstrap typeahead 知道如何执行此操作,则您没有向它提供所需的信息,因为您只向它提供了用户的名称。

我想你想做的是:

  • 将用户名和用户路径发送到视图
  • 使用某种可以在选择项目时触发回调的自动完成小部件。
  • 选择用户时使用回调导航到选定的用户路径

我对 Bootstrap 的预输入并不完全熟悉——你也许可以用它来做这些事情。

但我主张使用文档更好的东西,比如 jQuery UI:s autocomplete。

于 2013-02-28T14:41:50.447 回答