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 。 似乎是在检查关联有效性的过度杀伤,但我是一个菜鸟。