誰かがここで何が起こっているのか理解できますか?コードを希望どおりに機能させることはできましたが、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_associatedAPI仕様の内容です。
validates_associated(* attr_names)
関連する1つまたは複数のオブジェクトがすべて有効であるかどうかを検証します。あらゆる種類のアソシエーションで動作します。
...
注:関連付けが割り当てられていない場合、この検証は失敗しません。アソシエーションが存在し、有効であることが保証されていることを確認する場合は、validates_presence_ofも使用する必要があります。
代わりに、これを使用して目的の動作を得ることができました。
validates :user, :post, :presence => true
API仕様についての私の理解は、validates_associedが関連するテーブルをチェックして、外部キーがnil以外の場合に、 Flagの外部キーと一致するIDを持つ行が存在するかどうかを確認することです。誰かがこれについて何か洞察を提供できますか?validates_associatedがどのように機能するのか誤解していますか?