質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Ruby

    9430questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails 5

    3177questions

コメントの投稿、削除のAjax化と、本番環境での500(Internal Server Error)について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 327

JunTakizawa

score 2

コメント削除機能のAjaxが発火しません。

画像の投稿に対してのコメントの投稿、削除機能のAjax化に成功したので、
デプロイ後のファイルを編集して本番でも非同期で投稿、削除ができるようにするために、
ローカルの記述をそのままviの編集で書き加えました。

いざ動かしてみると、コメントの投稿は問題なく動きましたが、削除しようとするとAjaxが発火せず、
検証でconsoleを見てみると、
500エラー
とエラーとなり、非同期通信が成功していませんでした。
この状態でcommand +Rでリロードすると削除され、エラーはなくなります。

ローカルの環境でも"rails s -e production"でサーバー起動できるように設定し、問題なく動いたので、これで本番環境に移行したときにエラーになってしまう理由がわからないでいます。

500(Internal Server Error)について少し調べて見たところ、500番台のエラーはサーバー側のエラーのようです。原因としては、

・サーバー側の高負荷
・文法エラー等

他にもいくつか考えられる原因は列挙されていましたが、おそらく自分の文法エラーなのかなと思うのですが。。。

[9/27追記]
いただいたアドバイスを元に、サーバー側のエラーが起きているときのログを確認してみると
イメージ説明
(※@photoの@は部分テンプレートでrenderしようしているため今@photoはphotoに修正してあります)
テンプレートエラーが発生している事がわかりました。

 発生している問題・エラーメッセージ

500 (Internal Server Error)

 該当のソースコード

// コメント投稿Ajax(#ajaxが投稿フォームのid、 .delete-commentが削除のlink_toに指定したclassです)
  $(document).on("ajax:success", "#ajax, .delete-comment", function(e) {
    $('#ajax-comments').html(e.detail[2]["response"]);
    $(".comment-form").val('');
  });

 試したこと

□投稿と削除のjsの記述を分けてみました
$(document).on("ajax:success", "#ajax", function(e) {
$('#ajax-comments').html(e.detail[2]["response"]);
$(".comment-form").val('');
});

$(document).on("ajax:success", ".delete-comment", function(e) {
$('#ajax-comments').html(e.detail[2]["response"]);
$(".comment-form").val('');
});

で、2つに分けてみました。結果同じ削除で500エラーでした。

□application.jsに記述してあったものを、該当するviewファイルの<script>タグ内に記述してみました
<script>

$(document).on("ajax:success", "#ajax, .delete-comment", function(e) {
$('#ajax-comments').html(e.detail[2]["response"]);
$(".comment-form").val('');
});

</script>

結果、やはり同じ削除で500エラーでした。

以下、関連しうる現状のコードです

[routes.rb]

resources :photos do
  resource :likes, only: [:create, :destroy]
  resources :post_comments, only: [:create, :destroy]
end

[post_comments_controller.rb]

def destroy
    @photo = Photo.find(params[:photo_id])
    @user = @photo.user
    @comment = PostComment.find(params[:id])
    @comment.destroy
    render partial: 'photos/comments', locals: { photo: @photo, user: @user }
end

[/photos/_comments.html.erb]

<% photo.post_comments.reverse.each do |pstcmt| %>

<!--中略-->

 <% if pstcmt.user == current_user %>
   <%= link_to photo_post_comment_path(pstcmt.photo.id, pstcmt.id), class: "delete-comment", method: :delete, remote: true do%>
     <div style="margin-left:10px; color:rgba(0, 0, 0, 0.4);">
       <i class="far fa-trash-alt"></i>削除
     </div>
   <% end %>
 <% end %>

<!--中略-->

<% end %>

もし判明しましたらご教示よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • takumiabe

    2018/09/27 15:09

    サーバー側で、エラーが起きた時のログを見せてください。

    キャンセル

  • JunTakizawa

    2018/09/27 17:31

    リクエストありがとうございます。本当にすいません。プログラミング勉強中で、知識不足で申し訳ありません。サーバー側のエラーが起きたときのログの確認というのは、どうしたらできますでしょうか。

    キャンセル

  • JunTakizawa

    2018/09/27 19:15

    log/production.rbより確認できました。

    キャンセル

回答 1

check解決した方法

+1

すいません!いただいたアドバイスを元に自力解決できました!
コメント一覧のeach部をパーシャルで分けていました。それに対してコントローラーのdestroyアクションが以下のようになっておりました。これに気づくのに時間がかかってしまいました。
イメージ説明
インスタンス変数として定義していないのにrenderしようとしてエラーになっていました。

変数に全て@を付けたところ、問題なく動くようになりました。
解決のきっかけをいただいたtakumiabeさん ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Ruby

    9430questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails 5

    3177questions