Полиморфная ассоциация вставляет 0 вместо того, чтобы повысить ошибку, когда столбец неправильно конфигурируется как Целое число

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

NoMethodError: undefined method `constantize' for 0:Fixnum

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

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

15
задан zetetic 7 June 2010 в 08:28
поделиться

1 ответ

Это происходит потому, что параметры, передаваемые с запросами, приходят в виде строк, и поэтому для целочисленных столбцов, которые задаются из 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
9
ответ дан 1 December 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: