jsの$()とか#とか
課題17
$("#error_messages").remove()
まず、このコードを細かく見ていく。"#error_messages"
は、idがerror_messagesのものを対象とする、という意味で、removeは外すという意味なので、idがerror_messagesの表示があれば削除してくださいね、ということになる。これがないとどんどんエラーメッセージが溜まってしまう。
<% if @comment.errors.present? %> $("#new_comment").prepend("<%= j(render('shared/error_messages', object: @comment)) %>") <% else %> $("#js-table-comment").prepend("<%= j(render('comments/comment', comment: @comment)) %>") $("#js-new-comment-body").val('') <% end %>
少し長いけど、きちんと理解できるようにする。 一行目は、@commentにエラーがあるかどうかで分岐させている。エラーがあればtrue,なければfalseで分岐。
trueなら、idがnew_commentを対象にして、prepend(対象の前に挿入する)をしている。prependの中身は(" ")で囲んでいるので文字列にしている。erbなので、<%= %>で呼び出している。
j()
はActionView::Helpers::JavaScriptHelper#escape_javascript
のエイリアス。改行コード、シングルクォート、ダブルクォートをJacaScript用にエスケープしてくれる。エスケープとは、プログラム内で使用できない文字を、大体の文字に置き換えること。
render('shared/error_messages',object: @comment)では、sharedディレクトリの_error_messages.html.erbを呼び出す。その際にobjectを@commentに置き換えて呼び出す。
falseの場合、elseが処理されるので、$("js-table-comment")
を対象として、その先頭に("<%= j(render('comments/comment', comment: @comment)) %>")を呼び出す。ということになる。
$("#js-new-comment-body").val('')
は、idがjs-new-comment-bodyの値を''
にするという動きをする。