Ich habe eine Form, die umfassen NummernfelderWie das Feld validate nicht enthält. und
<%= f.number_field :contribution_to_sales, class: 'form-control',:pattern=>["\d+"] %>
Es erlaubt 2.0, aber ich will es nicht 2.0 ermöglichen. Wie geht das?
Ich habe eine Form, die umfassen NummernfelderWie das Feld validate nicht enthält. und
<%= f.number_field :contribution_to_sales, class: 'form-control',:pattern=>["\d+"] %>
Es erlaubt 2.0, aber ich will es nicht 2.0 ermöglichen. Wie geht das?
folgende Unterlagen an das Model In dieser Form beruht auf:
validate :format_numbers
def format_numbers
if self.number_field.include?(',') || self.number_field.include?('.')
errors.add(base: "Do not add commas or periods please")
end
end
, dass ein Weg zur Validierung ist jedoch ziehe ich den viel benutzerfreundlicher Art und Weise, die ein Benutzer bestimmte Dinge entfernt hinzufügen kann, dass ich weiß, dass ich don Ich möchte das Formular nicht verarbeiten, sondern mit dem Fehler fortfahren. Dies würde durch das Entfernen von Kommas geschehen, und da Sie keine Perioden haben wollen, würde ich mir auch vorstellen, dass wir etwas rechts von einer Periode entfernen können. Um es zu tun auf diese Weise Sie folgende in Ihrem Modell anstelle der oben tun würde:
validate :format_numbers
def format_numbers
self.number_field = self.number_field.gsub(/\.\d+/, '') #This will remove any period and all numbers to the right of that period.
self.number_field = self.number_field.gsub(',','') #This will remove all commas throughout.
end
Dies sorgt für eine glattere Erfahrung Benutzer, da sie jetzt 2.000,00 in das Formularfeld eingeben können, und es wird als 2000
gespeichert werdenSie vermissen Anker auf Ihrem regulären Ausdruck, was dazu führt, dass die "2" in "2.0" übereinstimmt (in einigen Browsern). Die Regex zu verwenden ist:
<%= ... pattern: "^\d+$" %>
Sie sollten wahrscheinlich die Validierung auf dem Modell tun auch, wie das HTML5-Muster-Attribut kann nicht von allen Browsern befolgt werden. Einfach hinzufügen:
class YourModel < ActiveRecord::Base
validates :contribution_to_sales, numericality: { only_integer: true }
...
end
es nicht erlaubt 6,05 aber es allos 6.0 noch –