Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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 RoR-验证的存在,且无外键不起作用_Ruby On Rails_Belongs To - Fatal编程技术网

Ruby on rails RoR-验证的存在,且无外键不起作用

Ruby on rails RoR-验证的存在,且无外键不起作用,ruby-on-rails,belongs-to,Ruby On Rails,Belongs To,我使用的是验证gem的存在性。它工作得很好,除非我想让我的外键为零 以下是我的用户和项目模型。项目属于用户和参与者(参与者也是用户),但参与者可以为零 以下是我的用户模型: class User < ActiveRecord::Base attr_accessible :first_name, :last_name has_many :projects, :dependent => :destroy has_many :user_trimester_statuses, :

我使用的是验证gem的存在性。它工作得很好,除非我想让我的外键为零

以下是我的用户和项目模型。项目属于用户和参与者(参与者也是用户),但参与者可以为零

以下是我的用户模型:

class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name
  has_many :projects, :dependent => :destroy
  has_many :user_trimester_statuses, :dependent => :destroy
end
class用户:销毁
有多个:用户\u怀孕\u状态,:依赖=>:销毁
结束
这是我的项目模型:

class Project < ActiveRecord::Base
  attr_accessible :added, :amount, :contributor_id, :label, :ref, :trimester_id,    :user_id
  belongs_to :user
  belongs_to :contributor, :class_name => 'User'
  belongs_to :trimester
  validates :user, :existence => { :both => false }
  validates :trimester, :existence => { :both => false }
  validates :contributor, :existence => { :allow_nil => true, :both => false }
end
class项目'User'
属于:三个月
验证:user,:existence=>{:both=>false}
验证:孕三个月,:存在=>{:both=>false}
验证:contributor,:existence=>{:allow_nil=>true,:both=>false}
结束
当我尝试添加一个新项目时,如果user\u id或trimester\u id字段为空或无效,则会出现错误。但是对于contributor_id字段,如果该字段无效,则不会引发错误。它通过任何一种方式(有效、无效或无)

我做错了什么?
我正在使用ruby 2.0.0p0和rails 3.2.13。

项目中似乎有一个公开的bug

您可能需要为这种情况编写一个简单的自定义验证器,直到修复为止。(或者深入研究,看看你是否能自己解决这个问题)

更新: 我刚刚克隆了这个项目,并编写了一个测试,看看问题出在哪里。当您添加allow_nil时,似乎根本不会调用存在验证器。 我不确定这是为什么,但在此期间,您可以通过使用proc以一种简单的方式解决这个bug。 而不是

validates :contributor, :existence => { :allow_nil => true, :both => false }
这将使工作完成

validates_existence_of :contributor, :unless => Proc.new { |obj| obj.contributor_id.blank? }
我能够在我的测试案例中证明这一点。
(我使用了“validates\u existence\u of”方法,而不是“validates”,因为我认为在这种情况下它更干净)

非常感谢。至少这不是我的错!我是RoR新手,所以我将编写一个自定义验证器。