を返し続けます。私は楽.each方法でそれを行うことができるが 、私はまた、.inject({})の方法でそれを行う可能性が期待していたが、この方法は、時間の2/3 nilを返します。ルビーを注入は、私はハッシュを返すために、単純なSQLクエリを実行しているNilClass
誰も私が間違ってやっているかを説明することはできますか?
この
はプットが を返し、これは注入方法.inject({}) do |hash,elmt|
p "hash ==> #{hash}"
puts '------------------'
if hash[elmt.checker.display_name]
hash[elmt.checker.display_name] << elmt.date
hash
else
hash[elmt.checker.display_name] = elmt.date
hash
end
end
ある
CheckerAvailability.availabilities(12)).to eql({
'Clint Eastwood' => [Date.today, Date.today + 1.day],
'Bob Morane' => [Date.today + 11.days]
}
予想通りのハッシュを返す
def self.availabilities(days=10)
hash = {}
where(
'date >= ? AND date <= ?',
Date.today, Date.today + days
)
.each do |availability|
p availability
if hash[availability.checker.display_name]
hash[availability.checker.display_name] << availability.date
else
hash[availability.checker.display_name] = [availability.date]
end
end
hash
end
正常に動作します.each方法であります
"hash ==> {}"
------------------
"hash ==> "
------------------
"hash ==> "
------------------
そして、私はそれを反復処理しようとした場合、もちろんそれは動作しません。あなたの助け
ため
おかげで誰もが偉大な一日を!あなたは二つの引数を参照する必要があります
.inject({}) do |hash,elmt|
p "hash ==> #{hash}"
puts '------------------'
if hash[elmt.checker.display_name]
hash[elmt.checker.display_name] << elmt.date
hash
else
hash[elmt.checker.display_name] = elmt.date
hash
end
end
:
ただ、サイドノート:それはあなたが、N + 1のクエリを実行しているように見え、あなたのコードのパフォーマンスは、 'include'やデータベースのjoinを使うことで大幅に改善されるかもしれません。 'checker'はデフォルトの' belongs_to:checker'の関連付けで、 'display_name'はデータベースの列ですか? – spickermann