2017-01-15 4 views
0

次のように、私はコードの行を持っているレールコントローラでコードを失敗します私は、コードを直接実行するとRSpecのテストでは、私のapplication_controller.rbで

visit applications_path 

を次のように、それは完璧に動作しますが、それはRSpecの経由application_controller.rb訪れたとき、私は

NoMethodError: 
    undefined method `compact' for nil:NilClass 
を言うエラーが出ます

私はRSpecのとカピバラを経由して、このエラーを取得しますが、私は

def index 
CaseStatus.order(:application_source).pluck(:application_source) 
end 

ようなコードを実行する場合、それはエラーなしで完全に実行しながら、わかりません。ちょっと混乱して、uniq!がコード内で壊れてしまって、突然結果がゼロになってしまった。

私はuniq!は、あなたが見る、この場合には使用したい方法ではないと思います。このエラーに

Failure/Error: @application_channels = CaseStatus.order(:application_source).pluck(:application_source).uniq!.compact if CaseStatus.order(:application_source).present? 

NoMethodError: 
    undefined method `compact' for nil:NilClass 
# ./app/controllers/loan_applications_controller.rb:53:in `index' 
+0

通常、エラーメッセージには、例外が発生したファイル名と行番号が含まれています。スタックトレースを含むエラーメッセージ全体を投稿できますか? – spickermann

+0

空のapplication_sourceでCaseStatusを作成しましたか? –

+0

@PeterdeRidderいいえ、CaseStatusには2つのレコードがあり、どちらもapplication_source値を持ちます。 –

答えて

0

を得る:

戻り値を変更がない場合はnilを(つまり、重複は検出されません)。 https://ruby-doc.org/core-2.2.0/Array.html#method-i-uniq-21

だから、次のように動作します。のような一方uniq作品で

2.3.1 :008 > a = [1,2,3,3,nil].uniq! 
=> [1, 2, 3, nil] 
2.3.1 :009 > a = [1,2,3,nil].uniq! 
=> nil 
2.3.1 :010 > 

2.3.1 :010 > a = [1,2,3,3,nil].uniq 
=> [1, 2, 3, nil] 
2.3.1 :011 > a = [1,2,3,nil].uniq 
=> [1, 2, 3, nil] 

uniqの出力に削除するcompactを実行しても安全ですnil値。

関連する問題