代码之家  ›  专栏  ›  技术社区  ›  zetetic

多态关联在列被错误配置为整数时插入0而不是引发错误

  •  15
  • zetetic  · 技术社区  · 14 年前

    这里有一个让我困惑了一段时间,尽管回想起来,它应该是显而易见的。我收到了错误信息

    NoMethodError: undefined method `constantize' for 0:Fixnum
    

    通过多态关联访问模型时。把桌子放在 belongs_to 关联的一侧有一个整数 type 列而不是字符串。

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

    1 回复  |  直到 13 年前
        1
  •  9
  •   Max Williams    14 年前

    这是因为与请求一起发送的参数作为字符串来传递,因此对于从参数设置的整数列,rails调用字符串上的_i来获取整数。如果它无法从中解析整数(如果字符串不是以某些数字开头,则会发生这种情况),则返回0。这就是Ruby的工作原理。有时候Rails会发现这一点并发出警告,但它不可能知道必须检查的每一列的名称。(从控制台)检查这个。

    >> quiz = Quiz.first
    => <a quiz>
    >> quiz.user_id = "foo"
    => "foo"
    >> quiz.save
    => true
    >> quiz.user_id
    => 0