find_or_create_by - 当记录存在时 id = nil

wis*_*lin 6 postgresql activerecord ruby-on-rails-4

我正在尝试使用 ActiveRecord 的find_or_create_by方法,并且我需要返回记录的 ID。当此方法创建新记录时,就会发生这种情况。但是,如果记录已存在,则 ID(以及 和created_atupdated_at)为nil。所有其他数据都返回得很好。为什么是这样?我可以在我的数据库中看到它并且它有一个 ID。当我使用find_by获取记录时,返回ID。这是一个错误还是我错过了什么?

小智 3

我知道这是一个老问题,但我也遇到了同样的问题,而且这是一个非常简单的用户错误。

如果没有找到所选属性的持久对象,则对象id的 将会是nil,但无法完全创建(初始化并保存到数据库),因为它未通过验证。

太长了;如果您使用Model.find_or_create_by(attributes)并最终得到一个具有 的对象id: nil,请检查它的错误,调整您的属性,然后愉快地编码。