我有一个活跃的记录类
class Service_Catalogue < ActiveRecord::Base
set_table_name "service_catalogue"
set_primary_key "myKey"
end
myKey是一个nvarchar(sql server)。
当我尝试保存时
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),因此失败。
有没有办法告诉它不要试图关闭身份插入?
更新
事实证明,活动记录sql server适配器的版本应该受到指责。 我之前一直在使用1.0.0.9250,但不知何故安装了2.2.19(我假设在进行gem更新时)。恢复到旧版本后,它可以正常工作。
答案 0 :(得分:4)
如果不是这种情况,ActiveRecord喜欢使用整数ID列并抛出拟合。可以指导它来处理替代方案,但这取决于您的环境。
另一种方法是使用传统的基于整数的ID字段,以及用于查找的唯一“密钥”字段。
class Service_Catalogue < ActiveRecord::Base
set_table_name "service_catalogue"
validates_uniqueness_of :myKey
end
如果可能,更改架构以适应ActiveRecord可能比指导ActiveRecord处理架构更方便。如果没有,你可能需要真正陷入困境。
另一种方法可能是使用像DataMapper这样的替代ORM,它没有相同的限制。
答案 1 :(得分:0)
我遇到的特殊问题是由于无意中的宝石升级造成的(幸好使用捆绑包现在这种情况不会发生!)。
旧的活动记录sql server adapter(1.0.0.9250)支持我想要完成的任务。