谁能弄清楚这里发生了什么?我能够让我的代码按照我想要的方式工作,但我无法弄清楚为什么 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_presence_of。
我能够通过使用它来获得所需的行为,而不是:
validates :user, :post, :presence => true
我对 API 规范的理解是 validates_associated 检查关联表,以查看是否存在具有与 Flag 的外键匹配的 id 的行,前提是外键是 non-nil。任何人都可以对此提供任何见解吗?我是否误解了 validates_associated 应该如何工作?