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

ruby-on-rails – validates_associated不检查是否存在关联

发布时间:2020-12-16 19:58:24 所属栏目:百科 来源:网络整理
导读:任何人都可以弄清楚这里发生了什么?我能够让我的代码按照我想要的方式工作,但是我无法确定为什么validates_associated不能正常工作.以下是我的代码片段: class Flag ActiveRecord::Base belongs_to :user belongs_to :post # allow only one flag per post
任何人都可以弄清楚这里发生了什么?我能够让我的代码按照我想要的方式工作,但是我无法确定为什么validates_associated不能正常工作.以下是我的代码片段:
class Flag < ActiveRecord::Base
  belongs_to :user
  belongs_to :post

  # allow only one flag per post per user
  validates_uniqueness_of :user_id,:scope => :post_id

  validates :user_id,:post_id,:presence => true
  validates_associated :user,:post

  attr_accessible :user_id,:post_id
end

使用这个代码,我无法保存一个带有user_id == nil的标志.我可以使用user_id == 12345保存一个标志(即某些user_id不在数据库中).这是validates_associated API规范说明的:

validates_associated(*attr_names)

Validates whether the associated object or objects are all valid themselves. Works with any kind of association.

NOTE: This validation will not fail if the association hasn’t been assigned. If you want to ensure that the association is both present and guaranteed to be valid,you also need to use validates_presence_of.

相反,我能够使用这个方法来获得所需的行为:

validates :user,:post,:presence => true

我对API规范的理解是,validates_associated检查关联的表,以查看是否存在与外部键匹配的id匹配的行,只要外键不为零.任何人都可以提供任何见解吗?我误解了验证关联应该如何工作?

解决方法

validates_associated只运行在关联对象的类中指定的验证,对外键不做任何操作.

验证:user_id,:presence => true确保在您的标志记录中存在user_id,但这就是全部.

验证:user,:presence => true用于关联本身,并确保外键正确设置.

(编辑:李大同)

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

    推荐文章
      热点阅读