4 votes

ActiveRecord find_each et Postgres

Je reçois l'erreur suivante :

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

quand j'essaie de le faire :

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

J'ai une clé primaire de type chaîne (UUID) pour mon modèle :

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

Je ne sais pas pourquoi ActiveRecord met dans ce WHERE mais elle est totalement inutile et est à l'origine de l'erreur de type (puisqu'il s'agit d'une colonne de type chaîne de caractères et non d'une colonne de type entier).

Alors, comment puis-je éviter cela ? Y a-t-il quelque chose que je devrais mettre dans la définition de mon modèle ? Ou dois-je éviter find_each et utiliser une méthode différente ? Il s'agit d'une tâche de ratissage qui ne fait que passer en revue toutes les entrées et rechercher des informations supplémentaires...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X