0

作成中のブログにコメントフォームがあります。

ブログの投稿は長いので、フォームは画面の外、ページの下部にあります。

コメントが検証に失敗した場合、ユーザーはページの上部に戻りますが、エラーメッセージはフォームがある場所のずっと下に表示されます。

これが発生した場合、ユーザーが検証エラーメッセージを確認できるように、ブラウザでコメントセクションに焦点を合わせたいと思います。

これが私のcomments_controllerの作成アクションです:

def create
  @article = Article.find(params[:article_id])
  @comment = @article.comments.build(params[:comment])
  if @comment.save
    redirect_to article_path(@article), notice: "Thanks for your comment"
  else
    # is there anyway to pass an id (like #comments) to this render call??
    render 'articles/show'
  end
end

ご覧のとおりrender 'articles/show'、検証が失敗した場合は呼び出します。私はこのようなことができることを望んでいました:

render 'articles/show', :anchor => '#comments'

理想的な世界では、上記のコードはarticles#showをレンダリングし、ビューポートのフォーカスをコメントセクションに設定します。を使用するときにアンカーを渡すことができることは知っていますがlink_to、でそれを行うことはできrenderますか?

このようなことは可能ですか、それともAjaxソリューションを使用する必要がありますか?

4

2 に答える 2

1

私はrenderあなたが望む仕事をすることができないと思います。ページ全体(レイアウトを含む)をレンダリングしrenderますが、変更するテキストだけではありません。

よりエレガントでシンプルなjQueryのAjaxを使用することをお勧めします。

于 2012-11-04T22:17:22.290 に答える
1

Ajaxは必要ありません-単純なjqueryが機能するはずです。

このようなもの(「.error-messages」をエラークラスに置き換えます):

$(document).ready(function(){

  if ($(.error-messages).length) {
      $('body').animate({scrollTop:$('.error-messages').offset().top})
  }

})

ページの読み込み時にエラーメッセージがある場合は、ページがスクロールしてエラーメッセージが表示されます。

于 2012-11-04T22:20:04.157 に答える