如何防止find_by将nil添加到数组

时间:2015-12-21 22:05:41

标签: ruby-on-rails ruby

我正在使用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

我不想在外出数组上添加nil。我怎么能这样做?上述方法并不奏效 - 理想情况下,我希望将其保持在一条线上。我试过拒绝(零),但那也没有用。我怎么告诉rails不向out数组添加nil?

3 个答案:

答案 0 :(得分:4)

where将数组作为输入,并使用简单的语句执行您想要的所有操作。

out = Frag.where(frag_key: b)

性能也有很大改善。

答案 1 :(得分:0)

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

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

  

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

实施例

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

find_by返回与条件匹配的第一条记录或nil

答案 2 :(得分:0)

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

您的if b.count > 0多余;如果b为空,那么each / map迭代将是微不足道的。