6

我想在创建对象后跳过验证。举个例子

人有很多公司,公司有很多人

一个人有很多展示位置,而展示位置属于这个人个人只能有一个有效展示位置

放置模型有一个验证,用于检查一个人在保存时是否已经有一个活动的放置。

@placement is active placement
@employment.placement = @person

if @placement.save
  #################
  @person.placements << @placement
  @company.placements << @placement
end

现在,当第一次保存展示位置时,没问题它会被保存。

现在问题来了

@person.placements << @placement

由于此人已经通过@placement.save 进行了有效的安置。

@person.placements << @placement 再次保存@placement 并且验证将验证错误触发到@placement 对象。

有什么办法可以让我告诉我不要在我的代码的############ 区域的某个地方进行特定的验证。

或者欢迎任何替代解决方案。

谢谢

4

2 回答 2

14

你可以使用:save :validate => false

于 2011-03-03T15:32:16.203 回答
1

如果您想在所有验证通过后保存,那么第一件事就是做这样的事情

if @placement.valid?
  @person.placements << @placement
  @company.placements << @placement
end

接下来的事情是,如果您使用的是 mongoid,那么<<操作员会调用.save这两个文档。

解决方案可能是覆盖<<mongoid,或者需要指定在哪个操作期间进行验证。

validates :placeholder, :on => :create或者

if @placement.valid?
  @placement.person = @person
  @company.placements << @placement
end
于 2011-01-26T11:11:54.593 回答