私は次の3つのモデルを持っています:
class Team < ActiveRecord::Model
has_many :teams_players
has_many :players, :through => :teams_players
end
class TeamsPlayer < ActiveRecord::Model
belongs_to :team
belongs_to :player
delegate :position, :to => :player
end
class Player < ActiveRecord::Model
has_many :teams_players
has_many :teams, :through => :teams_players
# the database attribute 'position' exists on Player
end
チームには複数のプレーヤーを含めることができ、プレーヤーは複数のチームに所属できます。ただし、チームは「キッカー」のポジションを持つプレーヤーを 1 人しか持てません。
この独自の検証を作成するにはどうすればよいですか?
私はこのように検証を追加しようとしましたTeamsPlayer
:
validates :position, :uniqueness => { :scope => {:team_id} }
しかし、検証中、Railsはデータベース テーブルのtype
列をチェックするクエリを実行します。TeamsPlayer
代わりに、それが委任されたメソッドであることを認識し、Player
代わりにデータベース テーブルでチェックするようにします。