0

我有一个搜索结果表单,它返回类 Document 的 @documents 列表。一个文档有一个类型。一个类型有很多文档。

我在搜索结果上有一个下拉列表过滤器,可以根据类型过滤@document 列表,但目前,该列表包含所有可能的类型。如果该类型的列表中至少有一个文档,我只希望该类型出现在下拉列表中。

(状态有第二个下拉菜单,同样的问题适用)

这是我到目前为止所拥有的,但它正在返回所有类型。

<%= form_for :document_filter, :url => search_results_home_index_path, :html => {:class=>"form-inline"} do |f| %>
  <%= f.collection_select :document_type_id , DocumentType.alphabetically , :id,:name,{:prompt=>"Select document type"} %>
  <%= f.collection_select :document_status , Status.for_filter , :id,:name,{:prompt=>"Select document status"}  %>
  <%= f.submit "Go" %>
<%end%>

Rails 有一个简单的方法来做到这一点吗?

4

1 回答 1

0

您可以为包含文档的文档类型创建一个范围,如下所示(在 models/document_type.rb 中):

scope :has_documents, lambda{
  joins(:documents).
  group("document_types.id")
}

然后在您的 collection_select 中,使用范围:

  <%= f.collection_select :document_type_id , DocumentType.has_documents.alphabetically , :id,:name,{:prompt=>"Select document type"} %>

(还没有尝试过,所以不能 100% 确定它会按原样工作)

于 2012-09-01T12:25:01.790 回答