Ruby on rails RoR-验证的存在,且无外键不起作用
我使用的是验证gem的存在性。它工作得很好,除非我想让我的外键为零 以下是我的用户和项目模型。项目属于用户和参与者(参与者也是用户),但参与者可以为零 以下是我的用户模型: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, :
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新手,所以我将编写一个自定义验证器。