2016-03-26 3 views
1

So habe ich Formular (typische Artikel und Kommentare Beispiel) für Kommentare am Ende der Seite. Wenn die Validierung fehlschlägt, zeige ich Validierungsfehler an.Rails 4: Scroll-Browser-Fenster zu Formular nach fehlgeschlagener Einreichung (Validierungsfehler)

Das ist meine Kommentare Controller-Code:

class CommentsController < ApplicationController 
    before_action :authenticate_admin!, only: [:destroy] 
    expose(:article) 
    expose(:comment, attributes: :comment_params) 
    expose(:reply) { Reply.new } 

    def create 
    comment.article = article 
    if verify_recaptcha(model: comment, message: t('captcha_verification_error')) && comment.save 
     flash[:comment_notice] = t('comment_created_successfully') 
     redirect_to article_path(article) + '#comments' 
    else 
     flash[:comment_errors] = comment.errors.full_messages 
     render 'articles/show' 
    end 
    end 

    def destroy 
    comment.destroy 
    redirect_to article_path(article) 
    end 

    private 

    def comment_params 
    params.require(:comment).permit(:author, :content) 
    end 
end 

Hier Form:

= simple_form_for(comment, url: article_comments_path(article)) do |f| 
    - if flash[:comment_errors] 
    .alert.alert-danger 
     strong= pluralize(flash[:comment_errors].count, 'error') + ' prohibited this article from being saved:' 
     - flash[:comment_errors].each do |msg| 
      ul 
      li= msg 
    fieldset class='form-group' 
    = f.label t('author') 
    = f.text_field :author, class: 'form-control', placeholder: t('who_are_you') 
    fieldset class='form-group' 
    = f.label t('content') 
    = f.text_area :content, class: 'form-control', rows: 6, placeholder: t('what_do_you_want_to_say') 
    fieldset class='form-group' 
    = recaptcha_tags 
    fieldset class='form-group' 
    = f.submit t('create_comment'), class: 'btn btn-primary' 

Für Formulare Ich verwende simple-form. Ich verwende auch decent exposure und slim

Ich möchte meine Seite nach der Validierung zu bilden, nach unten scrollen nicht (So Benutzer müssen nicht manuell scrollen). Gibt es einen einfachen Weg das zu erreichen?

AFAIK Ich kann nicht übergeben, um zu rendern (Das würde das Problem lösen). Irgendwelche Ideen? So

Antwort

0

Ich löste es mit diesem Javascript in Kommentar Form gelegt:

javascript: 
    if (document.getElementById("comment_errors")) { 
    location.hash = '#new_comment'; 
    } 

Wenn das Element mit id 'comment_errors' (My Validierungsfehler div) existiert es springt.