我正在尝试实现类似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的初学者,我很难找到一个好的解释器。谢谢!