Anzeige Fehler bei der Validierung von inline-anstatt am Anfang der Seite
Ich bin versucht, meine user-model-Validierung Fehler auf display inline mit dem entsprechenden Formularfeld. Ich bin mit bootstrap und entwickeln. Ich habe client-side Validierungen, so dass es nicht lassen, senden Sie das Anmeldeformular bis die meisten Validierungen erfüllt sind. Das problem ist, wenn ein Benutzer meldet sich mit facebook über omniauth. Omniauth nehmen die Felder, die von facebook gibt mir und verwenden Sie diese für die Benutzer, aber die Felder, die facebook nicht anbietet, dann hebt eine hässliche suchen Fehler auf der Seite oben. Ich habe versucht, einen Weg zu finden, um diese zu display inline.
Dies ist mein Benutzer-Modell:
class User < ActiveRecord::Base
has_many :bills, :dependent => :destroy
validates :cell_phone, presence: true
validates :cell_phone, length: { is: 10 }
validates :cell_phone, :numericality => {:only_integer => true}
validates :first_name, presence: true
validates :last_name, presence: true
validates :terms, presence: true
geocoded_by :last_sign_in_ip
after_validation :geocode
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :omniauthable,
:recoverable, :rememberable, :trackable, :validatable
def ability
@ability ||= Ability.new(self)
end
delegate :can?, :cannot?, :to => :ability
def self.from_omniauth(auth)
where(auth.slice(:sprovider, :uid)).first_or_create do |user|
user.sprovider = auth.provider
user.uid = auth.uid
user.first_name = auth.info.first_name
user.last_name = auth.info.last_name
user.email = auth.info.email
user.cell_phone = auth.info.cell_phone
user.avatar = auth.info.image
end
end
Dies ist das entwickeln, signup form, dass ich gerne das inline-Fehler angezeigt:
<div class="row sign_in">
<div class="col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="row">
<div class="form-group">
<div class="col-md-6">
<%= f.text_field :first_name, autofocus: true , class:'form-control',placeholder:'First Name *' , :required => true %>
</div>
<div class="col-md-6">
<%= f.text_field :last_name, class:'form-control',placeholder:'Last Name*' , :required => true %>
</div>
<div class="row">
</div>
</div>
</div>
<div class="form-group">
<%= f.phone_field :cell_phone, class:'form-control',placeholder:'Mobile Number*(Solely for notification purposes)', :required => true, :maximum => 10, :minimum => 10 %>
</div>
<div class="form-group">
<%= f.email_field :email, class:'form-control',placeholder:'Email*', :required => true %>
</div>
<% if f.object.password_required? %>
<div class="form-group">
<% if @validatable %><i></i><% end %>
<%= f.password_field :password, autocomplete: "off", class:'form-control',placeholder:'Password* (8 characters minimum)', id:"myPassword", :required => true %>
</div>
<div class="form-group">
<%= f.password_field :password_confirmation, autocomplete: "off", class:'form-control',placeholder:'Password Confirmation*', :required => true %>
</div>
<% end %>
<div class="form-group">
<%= f.check_box :terms%>
I have read and agreed the User
<a href="#" data-toggle="modal" data-target=".bs-example-modal-sm">Terms and Conditions</a>
<div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-md">
<div class="modal-content">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pretium libero eget posuere ornare. Donec rutrum augue eu erat fringilla posuere. Aenean tempus dui a erat facilisis posuere. Pellentesque eget nulla et turpis mollis egestas. Donec molestie consequat ultricies. Vivamus in feugiat risus. Ut a quam id sapien fringilla efficitur eget in justo. Suspendisse tincidunt libero metus. Sed ultrices auctor diam mattis pretium. Integer in aliquam dui. Praesent pulvinar ante non urna consectetur, eget porta lorem porta. Etiam ac orci pretium, faucibus neque vel, egestas velit. Nullam condimentum ultrices imperdiet. Maecenas vel nisi commodo, bibendum purus dapibus, porttitor felis.
Nullam nec porta lectus. Vivamus porta lobortis justo, sed cursus arcu tincidunt et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque a rhoncus tellus. Ut mollis orci quis lacus consequat, quis varius nunc auctor. Ut elit ligula, bibendum quis mauris a, ornare elementum dui. Phasellus commodo ipsum eu augue consequat porta.</p>
</div>
</div>
</div>
</div>
<div><i class="icon-heart"></i></div>
<%= f.submit 'Sign up', class:'btn btn-primary btn-block' %>
<% end %>
</div>
</div>
</body>
</html>
Dies ist das sign in mit facebook-Taste:
<div><i class="icon-heart"></i></div>
<%= f.submit 'Sign in', class:'btn btn-primary btn-block' %>
<%= link_to "Sign in with facebook", user_omniauth_authorize_path(:facebook), class:'btn btn-primary btn-block' %>
<br>
<div align="center">
</div>
Jede Hilfe, wie man über die Anzeige diese Fehler sind sehr geschätzt. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, hinzufügen von Bedingungen zu Validierungen, d.h. nicht überprüfen, einige der Attribute, wenn die facebook-id vorhanden ist (was bedeutet, Benutzer Anmeldung form facebook)
Über den Fehler in Ihrem Formular haben, können Sie loszuwerden, die top-Abschnitt, der zeigt alle Fehler an, und verwenden Sie
Nähe zu Ihrem Feld statt. Sie können immer Zugriff auf das Attribut (form-Bereich) Fehler, indem Sie tun,
Haben wir dies erreicht-bevor sich hier: http://firststopcosmeticshop.co.uk (klicken Sie auf "Registrieren")
Die Art, wie wir Taten, es war eigentlich ganz einfach:
Fehler
Jeden Fehler, den Sie anzeigen würde aus dem Modell müssen definiert werden in der
@object.errors
hash.Anstatt die Fehler, die oben auf Ihrer Seite, werden Sie tatsächlich in der Lage sein, um manuell Zyklus durch den hash, und zeigt die Fehler & zeigen Sie auf die form in Zeile:
Offensichtlich ein sehr Vereinfachtes Beispiel, aber wie Sie sehen können, Sie werden in der Lage sein, um den Fehler anzuzeigen inline mit der Eingabe, wenn es vorhanden ist. Dieser code ist schon etwas älter (vielleicht nicht
devise_resource
mehr) - so oder so, die wir gefunden haben, der beste Weg ist, zeigen die Fehler, wo Sie möchten, wie obenKönnen Sie
simple_form_for
stattform_for
wenn Sie verwenden Sie die Einfache Form (gem.simple_form_for
zeigt Fehlermeldung inline automatisch.Gem lese mich hier.
Wenn Sie wollen, um zu zeigen, die vollständige Fehlermeldung, dann Folgen Sie diesem link Display inline Fehler mit simple_form in Bootstrap, Ajax modal. Hoffe, dies hilft Ihnen!