когда вы используете pass в условиях в ActiveRecord, он на самом деле пытается проанализировать объекты, которые вы передали, это строка?массив?хэш?и что находится в строке, массиве или хэше?
и в вашем случае хеш, поэтому он пытается проанализировать, что находится в хэше, в первом операторе (который работает), который вы передали в экземпляре модели какзначение, поэтому он пытается найти, есть ли ассоциации, которые сопоставлены с указанным вами ключом и вуаля, он нашел его, и все работает как запланировано
во втором случае, вы передали в качестве значения значение nil,теперь ActiveRecord видит, что это нулевой объект, поэтому он решил, что это не ассоциация.обратите внимание, что он не смотрит на ключ, а только смотрит на значение, поэтому он пытается найти какой-либо столбец, который сопоставлен с ключом, но не может найти, возвращая ошибку
в последнем случае вы передали nil в качестве значения, то же самое, он попытался найти столбец, сопоставленный с: collection_id, таким образом, он передал nil в качестве значения в операторе SQL и успешно возвратил
так что ActiveRecord просто прискорбно принимает во внимание второй случай, когда второй случай не работает =)
надеюсь, это прояснится!= D