2015-12-21 53 views
1

我使用find_by(通常用在哪裏)像下面這樣:如何防止find_by從零添加到陣列

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

我想沒有一個小姐地址零到了陣。我怎麼能這樣做?上述不起作用 - 理想情況下,我想保持一條線。我嘗試拒絕(無),但那也不起作用。我會如何告訴rails不向out數組添加nil?

回答

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

if b.count > 0是多餘的;如果b爲空,那麼迭代將是微不足道的。

+1

非常好 - thx幫助刪除另一行 – timpone

+0

如果結果集非常大,這樣效率相當低;考慮查看@Swards的答案。 – omninonsense

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

+0

他沒有說他想讓自己的代碼出錯。 –

4

where將採取一個數組作爲輸入,並用簡單的語句來做所有你想要的。

out = Frag.where(frag_key: b) 

性能也大大提高。

+0

爲什麼表現會更好 - 而不是質疑;只是好奇。我傾向於使用哪裏。這是否足夠記錄? – timpone

+1

'where'帶有數組參數將執行單個SQL語句;用'find_by'循環數組將在每次傳遞時執行一條語句。 – zetetic