Я не могу проверить свое строковое поле

Я использую в проекте рельсы и SQL-сервер. Когда я помещаю в модель следующую проверку: validates :Clave, uniqueness: true, я получаю эту ошибку: can't cast ActiveRecord::ConnectionAdapters::SQLServer::Type::Char::Data to varchar

это моя schema.rb

create_table "Productos", primary_key: "Clave", force: :cascade do |t|
    t.integer  "Id",                 limit: 4,                             null: false
    t.varchar  "Producto",           limit: 255
    t.varchar  "CodBarras",          limit: 50
    t.varchar  "IdEmpresa",          limit: 50

  end

это моя модель producto.rb

class Producto < ActiveRecord::Base
  self.primary_key = "Clave"

  validates :IdEmpresa, uniqueness: true
  validates :Clave, uniqueness: true
  validates :Producto, presence: true

end

person LuisC    schedule 28.01.2017    source источник
comment
ActiveRecord::ConnectionAdapters::SQLServer::Type::Char::Data to varchar выглядит как ошибка типа столбца   -  person HarlemSquirrel    schedule 28.01.2017
comment
@HarlemSquirrel Только происходит со строкой, с другими полями, поскольку целое число не происходит   -  person LuisC    schedule 28.01.2017


Ответы (1)


Я не думаю, что вам нужно или нужно проверять первичные ключи. Записи без ключей не сохраняются в базе данных. Сохранение нового объекта должно сгенерировать для него новый первичный ключ.

Взгляните на эти сообщения, чтобы изменить первичный ключ, чтобы он не был целым числом:

person HarlemSquirrel    schedule 28.01.2017
comment
Спасибо за ответ, мне нужно проверить его, потому что, когда вставлен существующий первичный ключ, он показывает мне красный экран с ошибкой рельсов, указывающий, что он существует. Однако, если я проверю это таким образом, я смогу лучше показать пользователю ошибки, например: ‹% errors.full_messages.each do | сообщение | % ›‹Li›‹% = message% ›‹ / li ›‹% End% › - person LuisC; 28.01.2017
comment
Вы пытаетесь установить первичный ключ на основе пользовательского ввода? - person HarlemSquirrel; 28.01.2017
comment
Вы не хотите этого делать. ActiveRecord сгенерирует для вас первичный ключ. Пользовательский ввод не должен использоваться для установки первичных ключей. Просто заставьте этого пользователя ввести новый столбец и использовать первичный ключ по умолчанию id - person HarlemSquirrel; 28.01.2017
comment
Я знаю, но я работаю над ранее разработанным проектом, и он был ранее создан, потому что поле Clave похоже на идентификатор для продуктов. - person LuisC; 28.01.2017
comment
У меня такая же ошибка при проверке другого поля, которое является строкой. Очевидно, когда вы делаете validates: product, uniqueness: true, я получаю эту ошибку - person LuisC; 28.01.2017
comment
Как выглядят ваш schema.rb и модель? - person HarlemSquirrel; 28.01.2017
comment
Я обновил свой пост схемой и режимом. Я получаю ту же ошибку с полем CompanyId, потому что это строка - person LuisC; 28.01.2017