Вот тот, который озадачил меня некоторое время, хотя ретроспективно это должно было быть очевидно. Я получал сообщение об ошибке
NoMethodError: undefined method `constantize' for 0:Fixnum
при доступе к модели через полиморфную ассоциацию. Оказывается таблицей на belongs_to
сторона ассоциации имела целое число type
столбец вместо строки.
Легко зафиксированный, но кажется, что направляющие должны повысить ошибку в этой ситуации - вместо этого это счастливо добавляет строку с 0 в столбце типа.
Это происходит потому, что параметры, передаваемые с запросами, приходят в виде строк, и поэтому для целочисленных столбцов, которые задаются из params, rails вызывает to_i на строке, чтобы получить целое число. Если он не может получить целое число (что происходит, если строка начинается не с цифр), то to_i возвращает 0. Так работает ruby. Иногда rails заметит это и выдаст предупреждение, но он не может знать имя каждого столбца, который ему нужно проверить. Например, проверьте это (из консоли)
>> quiz = Quiz.first
=> <a quiz>
>> quiz.user_id = "foo"
=> "foo"
>> quiz.save
=> true
>> quiz.user_id
=> 0