我有一个包含以下集合的客户模型:
@doctors = Customer.joins(:user).where(users: {role: User.roles[:doctor]})
连接用户表和客户表,其中用户角色为" doctor"。
在我的客户索引视图中,我现在列出了所有客户,现在我想使用带有搜索按钮的下拉列表添加搜索过滤器,其中列表包含医生的名字。如果我按下搜索按钮,它应该只显示由下拉列表中选择的特定医生创建的客户。
1。如何使用只显示医生名字的搜索按钮添加下拉列表?
2. 当我从下拉列表中选择特定医生并点击搜索按钮时,如何过滤我的客户列表?
<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>
&#13;
以上是我目前正在使用的代码,但它是正确的Rails方式吗?
答案 0 :(得分:2)
答案1:
您可以使用JS执行此任务我建议您使用其中一个jquery插件用于搜索栏Select2和Chosen。
我对select2的个人经历令人印象深刻。
它还通过ajax和缓存加载数据,以避免重复调用。它的图形用户界面给你一种类似Google的感觉阅读其文档并使用它。
答案2:
select2也会给你change
之类的事件,所以你可以再次调用ajax来加载过滤客户。
答案 1 :(得分:1)
您只需在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
答案 2 :(得分:1)
您可以执行此auto_complete rails。看看吧 http://railscasts.com/episodes/102-auto-complete-association
由于