Ich habe tre ModelleAngepasste Validierung für einen Rails Verein
class ChallengeItem < ApplicationRecord
has_many :photos
end
class Photo < ApplicationRecord
belongs_to :challenge_item
has_many :votes
end
class Vote < ApplicationRecord
belongs_to :photo
validate :vote_per_foto
private
def vote_per_foto
if self.class.exists?(photo_id: photo_id, voter_string: voter_string)
errors.add :vote, 'already voted'
end
end
end
Grundsätzlich für jede Gruppe von Fotos (ChallengeItem) Benutzer nur ein Foto abstimmen. Jede Stimme hat ein Fingerabdruck-Attribut, genannt voter_string
Ich schreibe eine benutzerdefinierte Validierung, aber mit dieser Validierung akzeptiere ich nur eine Stimme für Foto. Ich brauche eine Stimme für jede Gruppe von Fotos ...
Wie kann ich es beheben?
ist nicht was ich brauche. Ich brauche keine Stimme für photo_id, ich brauche eine Stimme für challenge_item.photos –
Ich missverstanden. Wenn es eine 1 "Vote" pro "ChallengeItem" gibt, warum hast du dann keine direkte "gehört_zu" Beziehung zwischen den beiden Modellen? –
Weil die Leute für jedes Challenge-Item das beste Foto wählen müssen. Die Stimme gehört dem Foto ... aber sie können nur ein Foto wählen –