質問: Ruby on rails のscaffold で、ブログサイトのような物を作ろうとしています。 blog>entry>comment とモデルを作り、entry#show のビューファイルにcomment の一覧表が表示されるようにしました。 そのコメントの属性に「status」というものを用意し、「approve」「unapprove」のどちらかに該当するようにします。 ビューファイルから「unapprove」を選択すると「approve」に変わり、「approve」をクリックすると「unapprove」に戻りコメントの内容が非表示になるようにしたい、と思っています。 そこで、以下のように Javascript の「addEventListener」を使って実現しよう、と思ったのですが、Ruby とJavascript のコードが混在するせいか上手く動きません。 どうすればよいでしょうか? ・・・ <%# Title %> Body <% @entry.comments.each do |comment| %> <%= comment.body %> ・・・
回答: 全般におかしいです。 * まず、`<% ...%>`はRuby的に**何も出力しません**ので、`addEventListener`でセットした関数の処理内容は完全に空になります。 * そして、ループ内で``を生成しているため、同じIDが複数発生してしまいます。 * さらに、`document.getElementByID`は、そもそも最後の`d`が小文字でないといけませんし、それを無視するにしても、同じIDはHTML内で1つですので、全部のイベントが同じエレメントにセットされてしまうことになります。 「ループ内で`