带有搜索按钮的下拉列表 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 调用以加载已过滤的客户。
您只需在 rails 视图中使用以下标签:
<%= select("doctor", "firstname", @doctors.all.collect(&:firstname)) %>
然后在你的控制器中你会有这样的东西:
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
谢谢
我有一个包含以下集合的客户模型:
@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 调用以加载已过滤的客户。
您只需在 rails 视图中使用以下标签:
<%= select("doctor", "firstname", @doctors.all.collect(&:firstname)) %>
然后在你的控制器中你会有这样的东西:
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
谢谢