Ошибка: оператор не существует: символ меняется = целое число - PullRequest
13 голосов
/ 25 февраля 2011

У меня общая проблема. Мое приложение Rails работает на моей локальной машине, но после развертывания на heroku оно вылетает:

<% unless @user.hotels.empty? %>
  <% @user.hotels.each do |hotel| %>
    <%= "#{hotel.description} #{hotel.name} in #{hotel.city}, #{hotel.country}" %><br />
  <% end %>
<% end %>

Это из логов героки:

ActionView::Template::Error (PGError: ERROR:  operator does not exist: character varying = integer
LINE 1: SELECT "hotels".* FROM "hotels" WHERE ("hotels".user_id = 1)
                                                                ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "hotels".* FROM "hotels" WHERE ("hotels".user_id = 1)):

@user.hotels.empty? создает ошибку. Я знаю, что sqlite довольно простителен, но PostgreSQL - нет. Это внешний ключ в модели отеля: user_id :integer

Героку говорит:

Make sure the operator is adequate for the data type. ActiveRecord does this automatically when you use an interpolated condition form.

Array conditions:
:conditions => ['column1 = ? AND column2 = ?', value1, value2]

Hash conditions:
:conditions => { :column1 => value1, :column2 => value2 }

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

class CreateHotels < ActiveRecord::Migration
  def self.up
    create_table :hotels do |t|
      t.string :name
      t.string :vanity_url
      t.integer :user_id
      ....

1 Ответ

20 голосов
/ 06 октября 2011

Обычно это происходит, когда внешний ключ в базе данных не является целым числом.

Например:

LINE 1: SELECT "hotels".* FROM "hotels" WHERE ("hotels".user_id = 1)
                                                                ^

В этом случае PostgreSQL ожидает, что user_id будет целым числом, но похоже, что оно говорит вам, что на самом деле это был varchar.

Я бы попытался удалить столбец и добавить его снова.

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