Typeahead.js / Searchkick / Rails:如何将搜索视图推入下拉列表?

时间:2014-11-29 16:41:59

标签: ruby-on-rails typeahead.js searchkick

我正在尝试实现类似Facebook或Swell Grid(http://swellgrid.com/)的搜索,您可以在其中搜索多个属性,搜索数据显示在下拉列表中并直接链接到对象。

user.rb

searchkick autocomplete: ['profile.name', 'name', 'book.title']

  def search_data
    attributes.merge(
      profile_name: profile.name(&:name),
      book_title: books.map(&:title)
    )
  end

用户控制器

   def autocomplete
    render json: User.search(params[:query], autocomplete: true, limit: 10).map {|u| [u.name, u.profile.name] }.flatten
  end

users.js.coffee

$ ->
  $('#user_search').typeahead
    name: "user"
    remote: "/users/autocomplete?query=%QUERY"

查看(用户索引)

<%= form_tag users_path, class: "form-inline", :method => :get do %>
            <div class="input-group input-group-lg">
            <% if params[:query].present? %>
                <div class="input-group-btn">
                    <%= link_to "clear", users_path, class: "btn btn-default" %>
                </div>
            <% else %>
                <%= text_field_tag :query, params[:query], id: "user_search", class: "form-control", autocomplete: "off" %>
                <div class="input-group-btn">
                <%= submit_tag "Search", class: "btn btn-primary" %>
                </div>
             <% end %>
             </div>
        <% end %>

理想情况下,您可以按用户名,个人资料名称或图书标题搜索用户,搜索将直接链接到该用户的个人资料页面。

我可以在控制台中搜索user.name和user.profile.name User.search(“D”,autocomplete:true).map {| u | [u.name,u.profile.name]}但它给我一个错误的u.books.title(书籍属于用户,用户有很多书)。当我在视图中尝试时,下拉列表显示“未定义”。

如何更改搜索下拉列表中显示的数据?我是javascript的初学者,我很难找到一个好的解释器。谢谢!

0 个答案:

没有答案