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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

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

Ruby on Rails

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

jQuery

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

Q&A

解決済

1回答

3944閲覧

ActionController::RoutingError (No route matches [GET] "/groups/41/[object"):教えてください。。。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

jQuery

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

0グッド

0クリップ

投稿2019/08/11 00:33

編集2019/08/11 05:52

railsでajaxを用いて自動更新を実装しようとしていましてなんとかローカルサーバーで無事繋がり自動更新自体はされているのですが、データがうまく送れていないのかこの「ActionController::RoutingError (No route matches [GET] "/groups/41/[object"):」
が出てしまいます。どこを修正もしくは加えたら直りますか。

Ruby

1class Api::MessagesController < ApplicationController 2 def index 3 group = Group.find(params[:group_id]) 4 last_message_id = params[:id].to_i 5 @messages = group.messages.includes(:user).where("id > #{last_message_id}") 6 end 7end

jquery

1$(function() { 2 3 function buildHTML(message) { 4 var image = message.image? `<img src= ${ message.image }>` : ""; 5 var html = `<div class="message" data-message="${message.id}"> 6 <div class="upper-message"> 7 <div class="upper-message__user-name"> 8 ${message.user_name} 9 </div> 10 <div class="upper-message__date"> 11 ${message.date} 12 </div> 13 </div> 14 <div class="lower-message"> 15 <p class="lower-message__content"> 16 ${message.content} 17 </p> 18 ${image} 19 </div>` 20 return html; 21 } 22 $('#new_message').on ('submit', function(e){ 23 e.preventDefault(); 24 var formData = new FormData(this); 25 var url = $(this).attr('action') 26 27 $.ajax({ 28 url: url, 29 type: "POST", 30 data: formData, 31 dataType: 'json', 32 processData: false, 33 contentType: false 34 }) 35 36 .done(function(data) { 37 var html = buildHTML(data); 38 $('.messages').append(html); 39 $('#new_message')[0].reset(); 40 $('.messages').animate({ scrollTop: $('.messages')[0].scrollHeight}); 41 }) 42 43 .fail(function(data) { 44 alert('メッセージを入力してください') 45 }) 46 47 .always(function(data) { 48 $('.form__submit').prop('disabled', false); 49 }) 50 }); 51 52 var reloadMessages = function() { 53 if (window.location.href.match(//groups/\d+/messages/)){ 54 var last_message_id = $('.message:last').data("message-id") 55 $.ajax({ 56 url: 'api/messages', 57 type: 'get', 58 dataType: 'json', 59 data: {id: last_message_id} 60 }) 61 .done(function(messages) { 62 var insertHTML = ''; 63 messages.forEach(function(message){ 64 insertHTML = buildHTML(message); 65 $('.messages').append(insertHTML); 66 $('.messages').animate({ scrollTop: $('.messages')[0].scrollHeight}); 67 }) 68 }) 69 .fail(function() { 70 alert('自動更新に失敗しました!'); 71 }); 72 } 73 }; 74 setInterval(reloadMessages, 5000); 75});

jbuilder

1json.array! @messages do |message| 2 json.content message.content 3 json.image message.image 4 json.created_at message.created_at 5 json.user_name message.user.name 6 json.id message.id 7end

haml

1.message{"data-message-id": "#{message.id}"} 2 .upper-message 3 .upper-message__user-name 4 = message.user.name 5 .upper-message__date 6 = message.created_at.strftime("%Y/%m/%d %H:%M") 7 .lower-message 8 - if message.content.present? 9 .lower-message__content 10 = message.content 11 = image_tag message.image.url, class: 'lower-message__image' if message.image.present?

Ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root 'groups#index' 4 resources :users, only: [:index,:edit, :update] 5 resources :groups, only: [:new, :create, :edit, :update] do 6 resources :messages, only: [:index, :create] 7 namespace :api do 8 resources :messages, only: :index, defaults: { format: 'json' } 9 end 10 end 11end

追記

[1]こちらのコードを突っつかれますと、、

haml

1.message{"data-message-id": "#{message.id}"}

[2]同じgroup.idの場合のみここの処理がされ、、、

jquery

1var reloadMessages = function() { 2 if (window.location.href.match(//groups/\d+/messages/)){ 3 var last_message_id = $('.message:last').data("message-id") 4 $.ajax({ 5 url: 'api/messages', 6 type: 'get', 7 dataType: 'json', 8 data: {id: last_message_id} 9 }) 10 .done(function(messages) { 11 var insertHTML = ''; 12 messages.forEach(function(message){ 13 insertHTML = buildHTML(message); 14 $('.messages').append(insertHTML); 15 $('.messages').animate({ scrollTop: $('.messages')[0].scrollHeight}); 16 }) 17 }) 18 .fail(function() { 19 alert('自動更新に失敗しました!'); 20 }); 21 } 22 }; 23 setInterval(reloadMessages, 5000); 24});

[3]このapi/index.controller.rbが始まります。

Rails

1class Api::MessagesController < ApplicationController 2 def index 3 group = Group.find(params[:group_id]) 4 last_message_id = params[:id].to_i 5 @messages = group.messages.includes(:user).where("id > #{last_message_id}") 6 end 7end

[#]こちらがconfig/routes.rbになります。

Rails.application.routes.draw do devise_for :users root 'groups#index' resources :users, only: [:index,:edit, :update] 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

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

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

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

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

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

winterboum

2019/08/11 01:22

読み解くのもこの暑さ辛いので、 1) haml のどの要素を突っつくと、 2) どのfunctionが呼ばれ 3) controllerのどれに送るつもりなのか と config/routes.rb を 教えて下さい。 # コメントでなく、質問本文に追記で
退会済みユーザー

退会済みユーザー

2019/08/11 05:54

追記をいたしました。 わかりづらいままの投稿にも関わらずありがとうございます。 自分なりに情報は絞ったつもりなのですが、聞かれていることマッチしてない可能性もあるかもしれませんがよろしくお願いします。
guest

回答1

0

ベストアンサー

きちんと読んでいませんが、気になる所がいくつかあります
1)エラーメッセージの No route matches [GET] "/groups/41/[object"
の、最後 "[object"。 ここはactionが入るところなので、そこがおかしい。この部分のURLの作り方を間違えているのでは、と どのfunctionが呼ばれているのかを確認しました。
JSは苦手なので読みそこねているかもですが、この $.ajax({}) で "/groups/41/[object" となるのがはて。この [object というのは JSが期待している値を返しておらず object 某というのを返しそれが出て来ているのでは?と思いました。$.ajax({}) が使う変数の値をalertなどで確認してみて下さい。

2)url: 'api/messages' で呼んでいるのに /groups/41/ が無いと言っている。本当にそのfunctionが反応していますか?

3) /api/messages のindexからこのfunctionが呼ばれる で合ってます?
すると url "api/messages" は /api/messages/api/messages を呼びませんか?

4)このroutes.rb で /api/messages を呼ぶroutesができます?
rails routs で確かめて下さい

投稿2019/08/11 06:17

winterboum

総合スコア23329

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

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

退会済みユーザー

退会済みユーザー

2019/08/11 10:45

お返事遅くなりすみません。 [2]に関しては今一度確認してみたら何かおかしいと思いました。 [4]に関しましてはしっかり呼び出せるように設定してあります。 もらったお返事をもとに調べながらやってみようと思います。 お忙し中ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問