Rails 5.1如何不在collection_select中列出空值?

问题描述:

我有一个collection_select场这里列出:Rails 5.1如何不在collection_select中列出空值?

<%= form.collection_select :parent_id, Document.order(:name), :id, :name, 
    {:include_blank => ''}, {:class => 'form-control'} %> 

名称字段中有某些情况下空。我只想列出collection_select中的名称,如果它不为null。

有没有办法做到这一点?

设置一个范围,你的文档类:

##document.rb 
scope :named_documents, -> { where.not(name: nil).order(:name) } 

然后你可以使用它像这样:

<%= form.collection_select :parent_id, Document.named_documents, :id, :name, {:include_blank => ''}, {:class => 'form-control'} %> 
+0

谢谢。我需要调整它,因为它是一个空字符串。这就是我最终完成的作品。范围:named_documents, - > {where(“name ''”).order(:name)} – spacerobot

+0

您是否认为应该通过在模型中添加NOT NULL常量和验证来解决这个问题? – max

+0

不,我正在使用acts_as_tree和jstree来构建文件管理器的树。有时如果该字段不是类别标题,则该字段将是空的。 – spacerobot

你可以做

<%= form.collection_select :parent_id, Document.named_documents.reject{|d| d.name.nil?}.order(:name), :id, :name, 
    {:include_blank => ''}, {:class => 'form-control'} %> 

我更新它。

+0

感谢。我收到了一个未定义的方法“拒绝”错误。 – spacerobot

+0

我更新了它来实际迭代集合。 –