这是一段让我困扰了一段时间的人,虽然回想起来应该是显而易见的。我收到了错误消息
NoMethodError: undefined method `constantize' for 0:Fixnum
通过多态关联访问模型时。结果是关联的belongs_to
侧的表有一个整数type
列而不是字符串。
很容易修复,但似乎Rails应该在这种情况下引发错误 - 相反,它很乐意在类型列中添加0行。
答案 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
。