j'ai les trois modèles suivants:Valider méthode Rails délégués
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
Une équipe peut avoir plusieurs joueurs et un joueur peut appartenir à plusieurs équipes. Cependant, une équipe ne peut avoir qu'un seul joueur avec la position 'kicker'.
Comment puis-je créer cette validation unique?
J'ai essayé d'ajouter une validation sur TeamsPlayer
comme ceci:
validates :position, :uniqueness => { :scope => {:team_id} }
Mais lors de la validation, rails exécute une requête de vérification de la colonne type
sur la table de base de données TeamsPlayer
. Au lieu de cela, je veux qu'il reconnaisse que c'est une méthode déléguée et vérifie à la place sur la table de base de données Player
.
Pourquoi serait-il sur le '' Team' et non TeamsPlayer'? Si je le mets sur 'Team', ne pourrais-je pas ajouter autant de joueurs avec la même position que je veux? Je viens d'exposer un formulaire pour créer des objets 'TeamsPlayer' – Brian
Lors de la validation d'une contrainte comme X ne peut avoir qu'un Y, j'ai mis la validation sur X, donc je mettrais la validation sur' Team' pour vérifier qu'elle a seulement 'has' zéro ou un kickers. Je suppose que vous pourriez mettre une validation sur 'TeamsPlayer', je ne l'ai jamais essayé. –
Je crée/édite/détruis le modèle de jointure en utilisant son propre contrôleur, donc je ne pense pas que je puisse mettre la validation sur X. Je pense qu'ils ne fonctionneraient que si j'essayais de modifier X, ce que je ne suis pas. – Brian