railsを使ったメッセージアプリ開発で非同期通信を行なっております。
メッセージを投稿する際、jsファイルでfailの処理になってしまいます。
ターミナルを確認したところ、下記のような500エラーが出ておりました。
ActionView::Template::Error (undefined method `group_message_path' for #<#<Class:0x00007f8c9bb85270>:0x00007f8ca1aa0688> Did you mean? group_messages_path group_messages_url group_api_messages_path): 38: .messages 39: = render @messages 40: .form 41: = form_for [@group, @message] do |f| 42: = f.text_field :content, class: 'form__message', placeholder: 'type a message' 43: .form__box.message 44: = f.label :image, class: 'form__box__image' do
このことから、group_message_pathと定義していることが間違っているのだと推測しました。恐らくhamlの記述が間違っているとは思うのですが、どこが間違っているのかわかりませんでした。form_forの箇所がおかしいのかとも思いましたが、間違いを発見できず...
全くの初心者のため、理解できていない部分があるかと存じます。このエラー解決についてご教示いただけますと幸いです。よろしくお願いいたします。
以下、コードです。
なお、jQueryとhamlを使用しております。
message.js
$(document).on('turbolinks:load', function() { function buildHTML(message) { const image = (message.image) ?`<img src=${message.image} class="lower-message__image">`:""; var html = `<div class="message" data-message-id="${message.id}" > <div class="upper-message"> <div class="main-message__user"> ${message.user_name} </div> <div class="main-message__day"> ${message.time} </div> </div> <div class = "main-message"> <p class = "lower-message__content"> ${message.content} </p> ${image} </div> </div>` return html; } $(function(){ $('.new_message').on('submit', function(e){ e.preventDefault(); const formData = new FormData(this); const url = $(this).attr('action') $.ajax({ url: url, type: "post", data: formData, dataType: 'json', processData: false, contentType: false }) .done(function(message){ $("#new_message")[0].reset(); const html = buildHTML(message); $('.messages').append(html); $('.form').val(); $('.lower-message__content').css({'margin-bottom':'10px'}); }) .fail(function(){ alert('error'); }) .always(function(){ $('input[type = "submit"]').removeAttr('disabled'); }) }); });
messages_controller
def create @message = @group.messages.new(message_params) if @message.save respond_to do |format| format.html { redirect_to group_messages_path(@group), notice: 'メッセージが送信されました' } format.json else @messages = @group.messages.includes(:user) flash.now[:alert] = 'メッセージを入力してください。' render :index end end end
messages.html.haml
.messages = render @messages .form = form_for [@group, @message] do |f| = f.text_field :content, class: 'form__message', placeholder: 'type a message' .form__box.message = f.label :image, class: 'form__box__image' do = fa_icon 'picture-o', class: 'icon' = f.file_field :image, class: 'hidden' = f.submit 'Send', class: 'form__submit'
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。