当列错误配置为Integer时,多态关联插入0而不是引发错误

时间:2010-06-07 08:28:45

标签: ruby-on-rails

这是一段让我困扰了一段时间的人,虽然回想起来应该是显而易见的。我收到了错误消息

NoMethodError: undefined method `constantize' for 0:Fixnum

通过多态关联访问模型时。结果是关联的belongs_to侧的表有一个整数type列而不是字符串。

很容易修复,但似乎Rails应该在这种情况下引发错误 - 相反,它很乐意在类型列中添加0行。

2 个答案:

答案 0 :(得分:9)

这是因为通过请求发送的参数是作为字符串传递的,因此对于从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

答案 1 :(得分:0)

在我看来,modeltable_type不是解决问题的string type