ruby-on-rails – ActiveRecord find_each和Postgres

我收到以下错误:

PGError: ERROR:  operator does not exist: character varying >= integer
LINE 1: ...CT  "games".* FROM "games"  WHERE ("games"."uuid" >= 0) ORDE...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT  "games".* FROM "games"  WHERE ("games"."uuid" >= 0) ORDER BY "games"."uuid" ASC LIMIT 1000

当我尝试这样做时:

Game.find_each do |game|
  # ...
end

我的模型有一个字符串(UUID)主键:

class Game < ActiveRecord::Base
  self.primary_key = 'uuid'

  before_create do |game|
    game.uuid = UUIDTools::UUID.timestamp_create().to_s if game.uuid.blank?
  end
end

我不知道为什么ActiveRecord放入WHERE子句,但它完全没有必要和类型错误的原因(因为它是一个字符串列,而不是一个整数).

那么,我该如何避免这种情况呢?我应该在模型定义中添加一些内容吗?或者我应该避免使用find_each并使用其他方法吗?这是一个rake任务,只需查看所有条目并查找一些其他信息……

最佳答案
似乎find_each有一个非数字主键的错误:

https://groups.google.com/group/compositekeys/browse_frm/month/2011-06

转载注明原文:ruby-on-rails – ActiveRecord find_each和Postgres - 代码日志