Полиморфная ассоциация вставляет 0 вместо появления ошибки, когда столбец неправильно настроен как целое число - PullRequest
15 голосов
/ 07 июня 2010

Вот тот, который меня озадачил на некоторое время, хотя в ретроспективе это должно было быть очевидно. Я получаю сообщение об ошибке

NoMethodError: undefined method `constantize' for 0:Fixnum

при доступе к модели через полиморфную ассоциацию. Оказывается, таблица со стороны belongs_to ассоциации имела столбец целых чисел type вместо строки.

Легко исправляется, но похоже, что Rails должен вызвать ошибку в этой ситуации - вместо этого он с радостью добавляет строку с 0 в столбце типа.

1 Ответ

9 голосов
/ 07 июня 2010

Это происходит потому, что параметры, отправленные с запросами, передаются в виде строк, и, следовательно, для целочисленных столбцов, которые установлены из параметров, rails вызывает to_i в строке, чтобы получить целое число. Если он не может определить целое число из него (что происходит, если строка не начинается с нескольких цифр), то to_i возвращает 0. Именно так работает ruby. Иногда рельсы обнаруживают это и выдают предупреждение, но он не может знать название каждого столбца, который должен проверить. Например, проверьте это (с консоли)

>> quiz = Quiz.first
=> <a quiz>
>> quiz.user_id = "foo"
=> "foo"
>> quiz.save
=> true
>> quiz.user_id
=> 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...