如何防止findby将nil添加到数组中



我使用find_by(通常使用where),如下所示:

 out=[]
 Rails.logger.info("here is: #{b}")
 b.each { |v| out << Frag.find_by(frag_key: v) unless nil } if b.count>0

我不想在未命中的情况下向out数组添加nil。我怎么能这么做?以上内容不起作用——理想情况下,我希望将其保留为一行。我试着拒绝(零),但也没用。我该如何告诉rails不要向out数组添加nil?

where将使用一个数组作为输入,并用一个简单的语句完成您想要的一切。

out = Frag.where(frag_key: b)

性能也大大提高。

out = b.map{|v| Frag.find_by(frag_key: v)}.compact

您的if b.count > 0是多余的;如果b为空,则each/map迭代将是琐碎的。

使用find_by!方法。如果返回nil,这将引发RecordNotFound错误。

http://guides.rubyonrails.org/active_record_querying.html

发现了!方法的行为与find_by完全相同,只是如果找不到匹配的记录,它将引发ActiveRecord::RecordNotFound。

示例

Client.find_by! first_name: 'does not exist'
=> ActiveRecord::RecordNotFound

CCD_ 8返回与条件或CCD_。

最新更新