6

オブジェクトの作成後に検証をスキップしたい。例を見てみましょう

人にはたくさんの会社があり、会社にはたくさんの人がいます

人には多くのプレースメントがあり、プレースメントは人に属します人はアクティブなプレースメントを1つだけ持つことができます

配置モデルには、保存時にユーザーがすでにアクティブな配置を持っているかどうかを確認する検証が1つあります。

@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 に答える