这是让我感到困扰的一段时间,尽管回想起来,它本来应该很明显。我收到错误消息

NoMethodError: undefined method `constantize' for 0:Fixnum


通过多态关联访问模型时。原来,关联的belongs_to侧的表具有整数type列而不是字符串。

容易修复,但是在这种情况下,Rails似乎应该提出一个错误-取而代之的是,它很高兴在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

关于ruby-on-rails - 当列配置为Integer时,多态关联会插入0而不是引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2988006/

10-16 12:55