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

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

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

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

JavaScript

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

jQuery

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

3回答

2059閲覧

いいね機能の非同期通信が上手くいかない

kaho20181118

総合スコア2

Ruby on Rails

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

JavaScript

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

jQuery

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/07/27 10:47

編集2021/07/27 12:33

前提・実現したいこと

railsで本の感想アプリを作っています。
いいねの機能の非同期通信化を実装している際に以下のエラーメッセージが発生しました。

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

Completed 500 Internal Server Error in 128ms (ActiveRecord: 4.8ms) NoMethodError (undefined method ` ' for #<FavoritesController:0x00007f628e4a0400>): いいねをしてもリロードしないと反応なし。しかし、いいねを外すのはリロードなしでも反応している。

該当のソースコード

/bookers2-debug/app/views/books/show.html.erb

<td > <div id="favorites_buttons_<%= @book.id %>" > <%= render 'favorites/favorite-btn', book: @book %> </div> </td>

/bookers2-debug/app/views/books/index.html.erb

<%= render 'index', books: @books ,book: @book,user: @user %>

/bookers2-debug/app/views/books/_index.html.erb

<td> <div id="favorites_buttons_<%= book.id %>" > <%= render 'favorites/favorite-btn', book: book %> </div> </td>

/bookers2-debug/app/views/favorites/_favorite-btn.html.erb
(いいね機能のテンプレートファイル)

<% if book.favorited_by?(current_user) %> <%= link_to book_favorites_path(book.id), method: :delete, class: "favorite_btn", remote: true do %> ♥<%= book.favorites.count %> <% end %> <% else %> <%= link_to book_favorites_path(book.id), method: :post, class: "favorite_btn", remote: true do %> ♡<%= book.favorites.count %> <% end %> <% end %>

/bookers2-debug/app/controllers/favorites_controller.rb
(いいね機能のコントローラー)

def create        @book = Book.find(params[:book_id])  @favorite=current_user.favorites.new(book_id: @book.id)  @favorite.save(NoMethodError が起きた行です) # redirect_to request.referer end def destroy @book = Book.find(params[:book_id]) @favorite=current_user.favorites.find_by(book_id: @book.id) @favorite.destroy # redirect_to request.referer end

/bookers2-debug/app/views/favorites/create.js.erb

$('#favorites_buttons_<%= @book.id %>').html("<%= j(render partial: 'favorites/favorite-btn', locals: {book: @book}) %>");

/bookers2-debug/app/views/favorites/destroy.js.erb

$('#favorites_buttons_<%= @book.id %>').html("<%= j(render partial: 'favorites/favorite-btn', locals: {book: @book}) %>");

/bookers2-debug/app/models/book.rb

belongs_to :user validates :title, presence: true validates :body, presence: true, length: {maximum: 200} has_many :favorites, dependent: :destroy               def favorited_by?(user)           favorites.where(user_id: user.id).exists?            end

/bookers2-debug/app/models/favorite.rb
(いいね機能のモデル)

  belongs_to :user belongs_to :book validates_uniqueness_of :book_id, scope: :user_id

   

/bookers2-debug/app/models/user.rb

 has_many :favorites,dependent: :destroy has_many :books,dependent: :destroy attachment :profile_image, destroy: false

/bookers2-debug/app/javascript/packs/application.js

console.log('Hello World from Webpacker') require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") require('jquery')

/bookers2-debug/config/webpack/environment.js

const { environment } = require('@rails/webpacker') const webpack = require('webpack') environment.plugins.prepend('Provide', new webpack.ProvidePlugin({ $: 'jquery/src/jquery', jQuery: 'jquery/src/jquery' }) ) module.exports = environment

/bookers2-debug/Gemfile
(追加した文)

gem 'webpacker' gem 'jquery-rails'

全体のルーティング(一部抜粋)

edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update book_book_comments POST /books/:book_id/book_comments(.:format) book_comments#create book_book_comment DELETE /books/:book_id/book_comments/:id(.:format) book_comments#destroy book_favorites DELETE /books/:book_id/favorites(.:format) favorites#destroy POST /books/:book_id/favorites(.:format) favorites#create books GET /books(.:format) books#index POST /books(.:format) books#create new_book GET /books/new(.:format) books#new edit_book GET /books/:id/edit(.:format) books#edit book GET /books/:id(.:format) books#show PATCH /books/:id(.:format) books#update PUT /books/:id(.:format) books#update DELETE /books/:id(.:format) books#destroy

試したこと

NoMethodエラーということなので、favoritesコントローラーの定義の見直しなど。

補足情報(FW/ツールのバージョンなど)

ruby '2.6.3'
'rails', '~> 5.2.5'

JavaScriptの基礎は一通り勉強して、初めて非同期通信に挑戦中です。
未熟な点もあるとは思いますが、よろしくお願いします。

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

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

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

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

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

guest

回答3

0

自己解決

時間を開けて、AWS再起動し直したら理由は分かりませんが直ってました。とりあえずインデントには気を付けたいと思います。回答してくださったのにすいませんでした。ありがとうございました。

投稿2021/07/27 13:49

kaho20181118

総合スコア2

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

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

0

undefined method ' ' for とあるので、全角の空白が入っちゃってますね。半角にしましょう

投稿2021/07/27 12:47

winterboum

総合スコア23567

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

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

kaho20181118

2021/07/27 13:11

ありがとうございます。直したら、次は Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.3ms) NoMethodError (undefined method `destroy' for nil:NilClass): が出てきました。
winterboum

2021/07/27 13:13

エラーメッセージは全文載せてください 直したのはどこなのかもわかるようにしてくd祭
kaho20181118

2021/07/27 13:46

ブラウザ自体にはエラーが出ていなかったので、ターミナルに載っていたのを載せました。エラーっぽい文がこの2文しかなかったので提示させていただきました。ですが、自分が見逃している可能性もありますので、これから気をつけたいと思います。直した部分も今度から載せます。ありがとうございました。
guest

0

下記のエラーがどのファイルの何行目で出ているか?
とか調べてもらえますでしょうか?????

NoMethodError (undefined method ` ' for #<FavoritesController:0x00007f628e4a0400>):

投稿2021/07/27 12:21

hiyashikyuri

総合スコア388

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

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

kaho20181118

2021/07/27 12:27

忘れてました、すいませんm(_ _)m。 /bookers2-debug/app/controllers/favorites_controller.rbの@favorite.saveです。
hiyashikyuri

2021/07/27 12:38

ありがとうございます???? saveまで行ってるってことは、そこまでは問題なかった(可能性が高い)ということっぽいです @favorite.saveの部分ですが、@favorite.save! に変更して実行してもらえますか? エラーぶんの記載もお願いしますー
kaho20181118

2021/07/27 12:46

変更しました! Completed 422 Unprocessable Entity in 9ms (ActiveRecord: 0.5ms) ActiveRecord::RecordInvalid (Validation failed: Book has already been taken): app/controllers/favorites_controller.rb:8:in `create' が出てきました!
kaho20181118

2021/07/27 13:10

すいません!全角スペース直したら、 次はCompleted 500 Internal Server Error in 8ms (ActiveRecord: 0.3ms) NoMethodError (undefined method `destroy' for nil:NilClass): が出ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問