Как интерпретировать эту ошибку Rails? - PullRequest
1 голос
/ 25 марта 2009

Привет, кто-нибудь знает, что это значит? Я получаю эту ошибку, только когда приложение развернуто на сервере и использует PostgresQL. Когда я работаю локально и тестирую на SQLite, это нормально. У меня есть таблица соединений feature_simulations, я думаю, она как-то связана с ней.

Processing AdminController#confirmed (for 211.30.107.155 at 2009-03-25 09:06:21) [GET]
  Session ID: 59d7fdbbb6ec77367c310df0c0928a2a


ActiveRecord::StatementInvalid (PGError: ERROR:  relation "features_simulations_id_seq" does not exist
: SELECT currval('features_simulations_id_seq')):
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:188:in `log'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:503:in `execute'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1000:in `select_raw'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:987:in `select'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all_without_query_cache'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/query_cache.rb:60:in `select_all'

Ответы [ 5 ]

1 голос
/ 25 марта 2009

ActiveRecord на самом деле не использует составные ключи. В соединяемых таблицах все еще должен быть идентификатор для атомарных удалений и обновлений. Я думаю, что все остальные говорили то же самое, но более окольным путем.

0 голосов
/ 30 августа 2010

Это проблема с приспособлениями. Проверьте имена вашего прибора по именам таблиц. Вы получите эту ошибку, если есть несоответствие между ними.

0 голосов
/ 25 марта 2009

Я думаю, что "features _simulations _id _seq" - это последовательность, которую необходимо создать в базе данных. Эта последовательность, кажется, генерирует идентификатор для таблицы.

0 голосов
/ 25 марта 2009

В Postgres вы можете использовать серийный тип для автоинкрементного поля, которое автоматически создаст необходимую последовательность. Вы можете использовать целочисленный тип и вручную создавать последовательность, если хотите, устанавливая значение по умолчанию в качестве следующего значения из последовательности.

Похоже, что код пытается найти текущее значение последовательности и терпит неудачу, потому что последовательность не существует. Я не уверен, что rails автоматически создает правильный тип для первичных ключей Postgres.

0 голосов
/ 25 марта 2009

Я не уверен, но, возможно, вам нужен идентификатор в таблице features_simulations. Идентификатор не требуется, если вы используете отношения has_and_belongs_to_many. Но я думаю, что для has_many: через, вам нужен столбец id в таблице соединений.

Попробуйте добавить его в миграцию:

add_column :features_simulations, :id, :integer, :primary_key
...