1

外部キーを持つモデルがあります。user_id重複がのテーブルに入るのを防ぐデータベース制約がありますがSomeClass、モデルでその検証を繰り返して(実際にはプリエンプトして)、より適切に処理されるようにしています。したがって、私のモデルは次のようになります。

class SomeClass < ActiveRecord::Base
  belongs_to :user
  validates_presence_of :user
  validates_uniqueness_of :user_id
  ...
end

これがどのように行われる必要があるかを理解するのに少し時間がかかりました。userActiveRecordは、プレゼンスと一意性の検証のいずれかまたはuser_id一貫して使用することを期待する必要があるように思われます。それは次のようになります:

validates :user, :presence => true, :uniqueness => true

また:

validates :user_id, :presence => true, :uniqueness => true

user可能です。これは、すべての制約をグループ化するため、コードの保守性に最適です。では、なぜそれが矛盾しているのでしょうか?

4

1 に答える 1

1

その理由はとの違いにあると思いuser_idますuser

の存在は、のuser存在だけでなくuser_id、実際のユーザーの存在も確認します。

user_idとuserの一意性をチェックすると、同じ効果が得られる可能性があります。user_idをチェックするだけで、一意であることを確認できます。

于 2012-09-05T14:29:26.630 に答える