🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1069閲覧

ActionView::Template::Errorについて

rurururururu

総合スコア17

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/11/02 13:47

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'

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決しました。
原因としては、createアクションのrespond_to〜に対応するendの位置がおかしかったからでした。
ご協力いただき、ありがとうございました。

投稿2019/11/03 02:34

rurururururu

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

= form_for [@group, @message] do |f|

[@group, @message]
の部分で group_message_path を呼んでいます。
routes.rbはどうなっていますか?
そのformはどのcontrollerのどのmethodに飛ばしたいですか?

投稿2019/11/02 20:55

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rurururururu

2019/11/02 21:07 編集

ご回答ありがとうございます。 routes.rbは以下の通りです。 ``` Rails.application.routes.draw do devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root 'groups#index' #ルートパスにアクセスした時の処理 resources :users, only: [:edit, :update,:index] resources :groups, only: [:new, :create, :edit, :update] do resources :messages, only: [:index, :create] namespace :api do resources :messages, only: :index, defaults: { format: 'json' } end end end ``` formはmessagesコントローラーのcreateに飛ばしたいです。 エラーメッセージからformのところがgroup_message_pathになっているのが良くないということを推測しました。 しかし、form_forの@messageを@messagesにしても当然エラーになってしまいまして、どうすれば良いのかわかりませんでした。 よろしくお願いいたします。
winterboum

2019/11/02 21:18

messagesコントローラーのcreateに飛ばしたいのなら = form_for @message do |f| ですね
rurururururu

2019/11/03 02:33

自己解決しました。 原因としては、createアクションのrespond_to〜に対応するendの位置がおかしかったからでした。 ご協力いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問