【问题标题】:Ruby on rails where clause not finding correct recordsRuby on rails where 子句找不到正确的记录
【发布时间】:2018-04-24 10:41:24
【问题描述】:

我有一个这样设置的 rails 模型:

Poi:

id : int
name : varchar
subtype : int

我最近使用 mysql_dump 和 import 将很多记录从一个数据库迁移到另一个数据库。迁移似乎进展顺利,如果我在控制台中查询一个 id,它会找到该记录。有这样的记录:

id : 33
name : testpoi
subtype : 172

如果我尝试使用以下方法找到它:

Poi.where(:subtype => 172).first

它总是返回 nil

如果我在从中迁移数据库的系统上运行这个确切的查询,它确实可以工作。

如果我运行Poi.find(33),它也会找到它。我试过了

Poi.where(:subtype => "172").first 

还要确保它不是数据类型不匹配,但无济于事。

另外,如果我将此对象添加到集合中

@otherobject.poilist << Poi.find(33) #=> which has a has many with foreign key subtype

它工作得很好(保存后返回 true),但如果我重新启动生产控制台,则关联不再存在,即使子类型 id 与包含对象的 id 匹配。

【问题讨论】:

  • Poi.find(33).subtype 返回什么?
  • 它返回“172”(如我所料)
  • 如果subtype 是数据库中的Integer 列,我不会期望Poi#subtype 返回String。请解释为什么您希望它是String。此外:您的模型中是否有 enumvalidate 定义?请发布您的模型。
  • 您确定要连接到记录实际所在的同一个数据库,而不是连接到空的开发环境吗?
  • 感谢大家的回复。事实证明,由于一些时髦的迁移,子类型字段确实是一个字符串。这里真正的奇迹是,在某些情况下它确实有效,因为它不应该有效。案件结案!

标签: mysql ruby-on-rails ruby activerecord dump


【解决方案1】:

感谢大家的回复。事实证明,由于一些时髦的迁移,子类型字段确实是一个字符串。这里真正的奇迹是,在某些情况下它确实有效,因为它不应该有效。结案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多