6

次のモデルが与えられます。

class Question < ActiveRecord::Base
  has_many  :answers
end

class Answers < ActiveRecord::Base
  belongs_to: question
  validates :comment, presence: true
end

通話時

question = Question.new
question.answers.build
question.valid?

valid?false関連付けられた回答が無効であるため、返されます。書くとき

has_many :answers, validate: false

Question valid?返品でtrue

has_manyこれはバグですか、それとも関連付けられたモデルを使用すると自動的に検証される場合に必要ですか? Rails ガイドでvalidate_associatedは、has_manyリレーションシップでの使用について明示的に説明しています: http://guides.rubyonrails.org/active_record_validations_callbacks.html#validates_associated

4

2 に答える 2

7

それは間違いなくバグではありません。

  • を作成しましたQuestion
  • の新しいインスタンスをアタッチして、Answerこの新しいインスタンスに関連付けるようにRails に指示しました。Question
  • 次に、「Rails、作成したこのQuestion/Answerモデルと関連付けはデータベースに保存する準備ができていますか?」と尋ねます。

あなたが見つけたように、Railsはあなたの場合「いいえ」と言うでしょう。

私は使用したことがなく、気にしませんvalidates_associated。ただし、その動作が見られる理由を説明するドキュメントを参照することはできます。

上記のソース ファイルのドキュメントは全体を読む価値がありますが、この部分を抜粋します。

:autosave => false は、:autosave を宣言しないことと同じではないことに注意してください。 :autosave オプションが存在しない場合、新しい関連付けが保存されます。

  • :autosave => SOMETHINGあなたはあなたの:answers協会で指定していません
  • Answerこのため、Rails はデフォルトで、新しくビルド/関連付けられたものを新しいビルドに保存しようとします。Question
  • Answerが無効なため、保存に失敗します
于 2013-03-28T11:50:01.430 に答える