Ошибка базы данных, связанная с Postgresql: «ActiveRecord :: StatementInvalid: PGError: ОШИБКА: оператор не существует» - PullRequest
2 голосов
/ 17 апреля 2009

Моя модель состояния выглядит следующим образом:

class State < ActiveRecord::Base
  belongs_to :country
  named_scope :order_by_name, :order => :name

  validates_presence_of [:country, :name]

  def <=>(other)
    name <=> other.name
  end

end

Модель моей страны выглядит так:

class Country < ActiveRecord::Base
  has_many :states
  named_scope :order_by_name, :order => :name  

  def <=>(other)
    name <=> other.name
  end
end

Это работает в среде SQLite:

>> Country.find_by_iso("US").states
=> [#<State id: 1, name: "Alaska", abbr: "AK",  #  .....

Но в среде postgresql я получаю это:

>> Country.find_by_iso("US").states
ActiveRecord::StatementInvalid: PGError: ERROR:  operator does not exist: character varying = integer
LINE 1: SELECT * FROM "states" WHERE ("states".country_id = 214) 
                                                          ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT * FROM "states" WHERE ("states".country_id = 214) 

Есть мысли?

1 Ответ

8 голосов
/ 17 апреля 2009

Сообщение об ошибке совершенно ясно, вы пытаетесь провести сравнение между различными типами, поэтому обратите внимание на 'символ варьирования = целое число'.

Решение: сделать country_id столбцом типа 'int' вместо 'varchar'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...