Первичный ключ ActiveRecord - это varchar, ошибка при сохранении - PullRequest
2 голосов
/ 05 августа 2009

У меня активная запись класса

  class Service_Catalogue < ActiveRecord::Base
    set_table_name  "service_catalogue"
    set_primary_key "myKey"
  end

myKey - это nvarchar (сервер sql).

Когда я пытаюсь сохранить его

  service_catalogue= Service_Catalogue.new()
  service_catalogue.myKey = "somevalue"
  service_catalogue.save

Я получаю следующую ошибку:

  IDENTITY_INSERT could not be turned OFF for table [service_catalogue] (ActiveRecord::ActiveRecordError)

Похоже, что ActiveRecord считает, что первичный ключ является столбцом идентификаторов (это не varchar) и поэтому не работает.

Можно ли сказать, что он не должен пытаться отключить идентификационную вставку?

UPDATE

Оказывается, виновата версия сервера SQL Server с активной записью. Ранее я использовал 1.0.0.9250, но каким-то образом 2.2.19 был установлен (я полагаю, что при обновлении gem). После возврата к старой версии все работает нормально.

Ответы [ 2 ]

4 голосов
/ 05 августа 2009

ActiveRecord любит иметь столбцы с целочисленными идентификаторами и подбрасывает, если это не так. Его можно научить работать с альтернативами, но это зависит от вашей среды.

Альтернативой является наличие обычного целочисленного поля ID и уникального поля «ключ», которое используется для поиска.

class Service_Catalogue < ActiveRecord::Base
  set_table_name  "service_catalogue"

  validates_uniqueness_of :myKey
end

Если это возможно, может быть удобнее изменить вашу схему, чтобы она соответствовала ActiveRecord, чем тренировать ActiveRecord для работы с вашей схемой. Если нет, то вам, возможно, придется по-настоящему опуститься и запачкаться.

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

0 голосов
/ 16 февраля 2011

Особая проблема, с которой я столкнулся, была вызвана непреднамеренным обновлением гема (к счастью, с помощью bundler этого не происходит!)

Старый адаптер сервера SQL Active Record (1.0.0.9250) поддерживает то, что я пытался выполнить.

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