Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby-Checkbox验证_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Ruby-Checkbox验证

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

我正在尝试让我的复选框验证为我的应用程序工作。基本上,我输入一个车辆识别号(VIN),系统检查数据库中是否有重复项。如果用户单击复选框允许复制,我们希望允许复制。这是我目前的代码:

视图:

型号:

 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' }