我正在使用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?
答案 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
迭代将是微不足道的。