在Rails 3.2.9中删除了ActiveRecord to_i方法

van*_*oom 7 ruby-on-rails-3.2

今天从3.2.7升级到Rails 3.2.9,似乎已从ActiveRecord中删除了"to_i"方法.

这是设计的吗?或者这是一个错误?我在改变说明中找不到任何提及.这会影响很多代码.

谢谢!

Luc*_*ler 4

#to_i方法从未存在过,但是将对象分配给值的方式在 Rails 3.2.8 中发生了变化

鉴于以下情况:

class Lecture < ActiveRecord::Base
  has_one :professor
end
Run Code Online (Sandbox Code Playgroud)

以前你可以指派一位教授来听这样的讲座:

@lecture.professor = Professor.find_by_id(1)
Run Code Online (Sandbox Code Playgroud)

或者像这样:

@lecture.professor_id = Professor.find_by_id(1)
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,一切都很简单,因为professor协会需要一个教授对象。在第二种情况下,虽然 ActiveRecord 执行了一些魔法来强制教授提供 id,但正如professor_id所期望的那样,而是一个整数。

在 Rails 3.2.8 及更高版本中,这种魔法不再起作用。从某种程度上来说,这很好,因为它暗示您可能做错了什么。professor_id例如,如果数据库中没有列,而只是professor需要整数,则这样的分配将不再起作用。

看起来这将恢复为 Rails 3.2.11 中以前的行为