Ruby on rails Ruby-Checkbox验证
我正在尝试让我的复选框验证为我的应用程序工作。基本上,我输入一个车辆识别号(VIN),系统检查数据库中是否有重复项。如果用户单击复选框允许复制,我们希望允许复制。这是我目前的代码: 视图: 型号:Ruby on rails Ruby-Checkbox验证,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试让我的复选框验证为我的应用程序工作。基本上,我输入一个车辆识别号(VIN),系统检查数据库中是否有重复项。如果用户单击复选框允许复制,我们希望允许复制。这是我目前的代码: 视图: 型号: class Vehicle < ApplicationRecord attr_accessor :vincheck #this checks if the checkbox is checked validates_acceptance_of :vincheck, messa
class Vehicle < ApplicationRecord
attr_accessor :vincheck
#this checks if the checkbox is checked
validates_acceptance_of :vincheck, message: "Must check 'Allow Dup Vin' to save a duplicate VIN."
#this checks for the duplicate VIN in the database
validates :vin, uniqueness: true, :if => :vincheck
如果我输入有效的VIN,我会得到:
Vincheck Must check 'Allow Dup Vin' to save a duplicate VIN.
如果输入有效的VIN并单击复选框,则不会出现任何错误。我需要能够选择复选框,并在那里留下一个重复的VIN
我觉得我很接近,但肯定错过了什么。就好像
:if => :vincheck
实际上什么都没做。我原以为这会让我跳过接受的验证
有什么想法吗
谢谢 您添加了验收验证,因此无论vin编号如何,每次都会进行验收检查 请尝试以下解决方案,仅当Vinceck id失败时才会显示接受错误消息
class Vehicle < ApplicationRecord
attr_accessor :vincheck
validates_acceptance_of :vincheck,
message: "Must check 'Allow Dup Vin' to save a duplicate VIN.",
:if => :vincheck_fail?
validates :vin, uniqueness: true, :unless => :vincheck
def vincheck_fail?
self.vin.present? && Vehicle.where('vin = ? AND id != ?', self.vin, self.id).present?
end
end
class车辆:vincheck\u失败?
验证:vin,唯一性:true,:除非=>:Vinceck
你失败了吗?
自身vin是否存在?&&车辆位置('vin=?和id!=?',self.vin,self.id)。是否存在?
结束
结束
我希望这对你有用。你很接近了,只要在“如果”子句中使用一个Proc: 当前记录被传递给Proc,因此您可以检查任何属性
Vinceck也不需要接受验证。这将强制选中该框。您应该在
vin
验证上使用一条自定义消息来解释复选框的用法。以下是我最终使其工作的方式。我将Vinceck添加到数据库中,并将值预设为1。以下是执行检查的代码:
validates :vin, uniqueness: true, :unless => Proc.new { |vehicle| vehicle.vincheck == '1' }
感谢@Michael Chaney提供程序和数据库建议。感谢您提供的信息!当我尝试这个方法时,我在error.log中得到了这样的信息:“未定义的方法‘vincheck’for#你的意思是什么?vincheck”是的,我刚刚注意到你已经用
attr\u accessor
声明了它。它必须是一个数据库字段,否则如果您试图更新此记录,就会遇到问题。还有一个陷阱与您之前的记录有关,您的特定vin记录也需要检查。仔细想想你在这里做什么,因为这可能会导致以后的困难。啊。。。那么复选框需要是一个db字段?我从来没有真正打算保存它,但如果它需要在那里工作,我想我需要添加它。该复选框是我认为我可以向用户显示存在重复vin但仍允许他们保存的唯一方法。是否有一种方法可以告诉他们存在重复的vin,并直接保存它(绕过验证检查)?好的。。。我将vincheck作为一列添加到Vehicle表中(并禁用attr_访问器),最初将默认值设置为“1”。但是,我现在从未得到val错误,即存在重复项。我尝试将db值更改为“0”,以查看这是否产生了差异,但没有。。。仍然没有val错误,因为存在重复项。您已经超出了StackOverflow的范围。谢谢您的建议。我给了它一个机会,但得到,“文已经采取”。我从未看到“必须检查‘允许重复Vin’”消息。当我单击复选框时。。错误消息保留,不允许我提交重复的vin。有什么想法吗?谢谢
class Vehicle < ApplicationRecord
attr_accessor :vincheck
validates_acceptance_of :vincheck,
message: "Must check 'Allow Dup Vin' to save a duplicate VIN.",
:if => :vincheck_fail?
validates :vin, uniqueness: true, :unless => :vincheck
def vincheck_fail?
self.vin.present? && Vehicle.where('vin = ? AND id != ?', self.vin, self.id).present?
end
end
validates :vin, uniqueness: true, :unless => Proc.new { |vehicle| vehicle.vincheck? }
validates :vin, uniqueness: true, :unless => Proc.new { |vehicle| vehicle.vincheck == '1' }