加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 为什么ActiveRecord会自动验证has_many关联

发布时间:2020-12-17 03:22:56 所属栏目:百科 来源:网络整理
导读:以下模型给出: class Question ActiveRecord::Base has_many :answersendclass Answers ActiveRecord::Base belongs_to: question validates :comment,presence: trueend 打电话的时候 question = Question.newquestion.answers.buildquestion.valid? 有效
以下模型给出:

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?

有效?返回false,因为相关答案无效.写作时

has_many :answers,validate: false

在问题有效吗?返回true.

这是一个错误还是在使用has_many时需要自动验证相关模型? Rails指南明确解释了validate_associated与has_many关系的使用:http://guides.rubyonrails.org/active_record_validations_callbacks.html#validates_associated

解决方法

这绝对不是一个bug.

>您已经创建了一个问题
>您已告诉Rails附加一个新的Answer实例并将其与此新问题联系起来
>然后你问“Rails,我创建的问题/答案模型和关联是否已准备好保存到数据库中?”

正如您所发现的,Rails会在您的案例中说“不”.

我从未使用过,也不关心validates_associated.但是,我可以向您指出文档,解释您为什么会看到自己的行为.

> Active Record Autosave Association

虽然上面的源文件中的文档值得一读,但我会为你提取这些内容

Note that :autosave => false is not same as not declaring :autosave.
When the :autosave option is not present new associations are saved.

>您尚未指定:autosave =>对你的一些事情:回答关联>因此,Rails默认会尝试在新问题上保存新构建/关联的答案>保存将失败,因为答案无效

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读