带有搜索按钮的下拉列表 Rails

Drop Down List With Search Button In Rails

我有一个包含以下集合的客户模型:

@doctors =  Customer.joins(:user).where(users: {role: User.roles[:doctor]}) 

加入用户 table 和客户 table,其中用户角色是 "doctor"。

在我的客户索引视图中,目前我列出了所有客户,现在我想使用带有搜索按钮的下拉列表添加搜索过滤器,其中列表包含医生的名字。如果我按下搜索按钮,它应该只显示由该特定医生创建的客户 selected 从下拉列表中。

1.如何添加一个只显示医生名字的带有搜索按钮的下拉列表?


2. 当我从下拉列表中 select 特定医生并单击搜索按钮时,如何过滤我的客户列表?


<div class="btn-group">
            <button type="button" class="btn btn-success btn-sm"><b>Search By Dr.</b></button>
            <button type="button" class="btn btn-success btn-sm" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
             <span class="caret"></span>
             <span class="sr-only">Toggle Dropdown</span>
            </button>
            <ul class="dropdown-menu">

              <li><a href="#">List All Customers</a></li>
            <% @practices.each do |practice| %>
              <li><a href="#">Dr.<%= practice.firstname %></a></li>
            <% end %>
            </ul>
        </div>

以上是我目前使用的代码,但是 Rails 的正确方法吗?

答案 1:

您可以使用 JS 完成此任务我建议您使用这些 jquery 搜索栏插件之一 Select2 and Chosen

我对 select2 的个人体验令人印象深刻。

它通过 ajax 和缓存加载数据,以避免重复调用。它的 GUI 给你一种 Google 的感觉。阅读它的文档并使用它。

答案 2:

select2 还为您提供 change 之类的事件,因此您可以进行另一个 ajax 调用以加载已过滤的客户。

  1. 您只需在 rails 视图中使用以下标签:

    <%= select("doctor", "firstname", @doctors.all.collect(&:firstname)) %>

  2. 然后在你的控制器中你会有这样的东西:

    def index if params[:doctor] @customers = Customer.joins(:user).where(users: {role: User.roles[:doctor]}, firstname: params[:doctor][:firstname].downcase) else @customers = Customer.all end end

你可以做到这一点 auto_complete rails。看一看 http://railscasts.com/episodes/102-auto-complete-association

谢谢