【问题标题】:I can not validate my string field我无法验证我的字符串字段
【发布时间】:2017-01-28 15:22:00
【问题描述】:

我在一个项目中使用 Rails 和 SQL Server。当我在模型中进行以下验证时: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

【问题讨论】:

  • ActiveRecord::ConnectionAdapters::SQLServer::Type::Char::Data to varchar 看起来像列类型错误
  • @HarlemSquirrel 仅发生在字符串中,其他字段为整数不会发生

标签: ruby-on-rails sql-server validation ruby-on-rails-4 tiny-tds


【解决方案1】:

我认为您不能也不需要验证主键。没有键的条目不会保留在数据库中。保存一个新对象应该为其生成一个新的主键。

查看这些帖子,了解如何将主键更改为非整数:

【讨论】:

  • 感谢您的回复,我需要验证它,因为当插入现有的主键时,它会显示 Rails 错误的红屏,表明它存在。但是,如果我以这种方式验证它,我可以以更好的方式向用户显示错误,如下所示:
  • 您是否尝试根据用户输入设置主键?
  • 你不想那样做。 ActiveRecord 将为您生成主键。不应使用用户输入来设置主键。只需让该用户输入一个新列并使用默认主键id
  • 我知道,但我正在处理一个以前开发的项目,它是以前建立的,因为“Clave”字段就像产品的标识符
  • 在验证另一个字符串字段时,我遇到了同样的错误。显然,当您进行验证时:产品,唯一性:真我得到那个错误
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签