Ruby on rails 3 将关联mongoid上的验证设置为false

Ruby on rails 3 将关联mongoid上的验证设置为false,ruby-on-rails-3,mongoid,model-associations,Ruby On Rails 3,Mongoid,Model Associations,我有两种型号 class Person embeds_one :address end class Address embedded_in :person field :city validates :city, :presence => true end 现在当我这么做的时候 person.address = Address.new 调用地址的验证。但在我的情况下,我不需要验证,也不能从地址中删除:validates(因为我以后需要它)。我想做一些类似于(:vali

我有两种型号

class Person
  embeds_one :address
end

class Address
  embedded_in :person
  field :city
  validates :city, :presence => true
end
现在当我这么做的时候

person.address = Address.new
调用地址的验证。但在我的情况下,我不需要验证,也不能从地址中删除
:validates
(因为我以后需要它)。我想做一些类似于
(:validate=>false)
。如果有人有主意,请告诉我!我正在使用mongoid-2.0.0。

您可以使用

person.address = Address.create
那么验证就不叫我相信了。当您更新记录并最终保存它时,将调用验证。 也可以使用类似

person.address = Address.new :addres => "Valid address"
验证不会失败


打开和关闭验证对我来说似乎很奇怪,因为这会导致数据库中的地址无效。。。如果存在空地址问题,您可以将验证例程更改为也接受空地址。

如何创建自定义地址验证程序,并让它检查是否为新记录。如果是,那么它在空电子邮件中仍然有效?

我相信您想要的是:


地址=person.build\u地址

或者简单地说:


person.build\u地址


It id不起作用,我尝试了第一个选项,但出现了以下错误:“不允许访问Address的集合,因为它是嵌入文档,请从根文档访问集合”。我也尝试了第二种选择,但没有成功。实际上,在保存最终地址之前,我需要先保存一个中间地址。这就是我试图关闭验证的原因。您的错误在web上被发现了很多次,这似乎是一个mongoid问题,也可以看到这个问题:是的,这是针对embeds\u很多,但在中,我没有发现embeds\u one的错误。。。。此外,还保存了嵌入的文档,但仍会显示错误。