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_associatedwithhas_many关系的使用:http: //guides.rubyonrails.org/active_record_validations_callbacks.html#validates_associated

4

2 回答 2

7

这绝对不是错误。

  • 你创建了一个Question
  • 你已经告诉 Rails 附加一个新的实例Answer并将它与这个新的Question
  • 然后你问“Rails,Question/Answer我创建的这个模型和关联是否可以保存到数据库中?”

正如您所发现的,Rails 会在您的情况下说“不”

我从来没用过,也不在乎validates_associated。但是,我可以向您指出解释为什么您会看到自己的行为的文档。

尽管上述源文件中的文档值得完整阅读,但我会为您提取这一点

注意 :autosave => false 与不声明 :autosave 不同。 当 :autosave 选项不存在时,会保存新的关联。

  • 你没有:autosave => SOMETHING在你的:answers协会上指定
  • 因此,默认情况下,Rails 会尝试将新构建/关联的内容保存Answer在新的Question
  • 保存将失败,因为Answer无效
于 2013-03-28T11:50:01.430 回答
0

valid?为了处理验证,我已经在父模型中覆盖了它们的嵌套关联状态:

def valid?(context=nil)
  super(context) && self.answers.map(&:valid?).all?
end
于 2017-01-13T07:04:50.030 回答