2017-02-09 3 views
1

In meiner RoR-Anwendung möchte ich verhindern, dass Benutzer ein bestimmtes Wort in einem Textbereich eines Formulars wiederholen. Ich habe ein Formular, mit dem Benutzer Text eingeben können, um eine E-Mail zu senden, und ich möchte verhindern, dass sie das Wort "var1" mehr als einmal sagen. Ist das möglich?Ruby on Rails: Überprüfen, wie oft ein Benutzer ein Wort in ein Formular eingibt

Ich habe versucht, so mit der folgenden Validierung in meinem Modell zu tun, aber das funktioniert nicht:

class Email < ActiveRecord::Base 
    belongs_to :account 
    has_many :recipients 
    has_many :contacts, through: :recipients, :dependent => :destroy 
    has_many :groups, through: :recipients, :dependent => :destroy 

    validate :singular_var1 

    private 
    def singular_var1 
     if message.scan(/"var1"/).length > 1 
      errors.add :message, 'You must not repeat the word VAR1' 
     end 
    end 
end 

Antwort

1

Da Sie einen regulären Ausdruck verwenden, müssen Sie nur die Zitate entfernen:

... 

if message.scan(/var1/).length > 1 
    errors.add :message, 'You must not repeat the word VAR1' 
end 

... 

Beachten Sie jedoch, dass die Art, wie Sie sie gerade verwenden, nur Kleinbuchstaben "var1", nicht Groß- und Kleinschreibung erfasst. Wenn Sie möchten, dass eine Gehäusevariation erfasst wird, führen Sie stattdessen Folgendes aus:

... 

if message.downcase.scan(/var1/).length > 1 
    errors.add :message, 'You must not repeat the word VAR1' 
end 

... 
Verwandte Themen