外部キーを持つモデルがあります。user_id
重複がのテーブルに入るのを防ぐデータベース制約がありますがSomeClass
、モデルでその検証を繰り返して(実際にはプリエンプトして)、より適切に処理されるようにしています。したがって、私のモデルは次のようになります。
class SomeClass < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
validates_uniqueness_of :user_id
...
end
これがどのように行われる必要があるかを理解するのに少し時間がかかりました。user
ActiveRecordは、プレゼンスと一意性の検証のいずれかまたはuser_id
一貫して使用することを期待する必要があるように思われます。それは次のようになります:
validates :user, :presence => true, :uniqueness => true
また:
validates :user_id, :presence => true, :uniqueness => true
user
可能です。これは、すべての制約をグループ化するため、コードの保守性に最適です。では、なぜそれが矛盾しているのでしょうか?