validates_associated不检查关联的存在
任何人都可以弄清楚这里发生了什么? 我能够以我想要的方式使我的代码工作,但我无法弄清楚为什么validates_associated不能按我的预期工作。 这是我的代码片段:
class Flag :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)
validation关联的对象是否全部有效。 适用于任何类型的协会。
…
注意:如果尚未分配关联,则此validation不会失败。 如果要确保关联存在且保证有效,则还需要使用validates_presence_of。
我通过使用它来获得所需的行为,而不是:
validates :user, :post, :presence => true
我对API规范的理解是validates_associated检查关联的表以查看是否存在一行,其id与Flag 的外键匹配, 前提是外键是非nil 。 任何人都可以对此提出任何见解吗? 我是否误解了validates_associated应该如何工作?
validates_associated
只运行在关联对象的类中指定的validation,它对外键没有任何作用。
validates :user_id, :presence=>true
确保在您的标记记录中存在user_id
,但这就是全部。
validates :user, :presence=>true
用于关联本身并确保正确设置外键。
男人……我得到的是,当你从API获得时,需要使用validates_presence_of
。 似乎是在检查关联有效性的过度杀伤,但我是一个菜鸟。