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

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

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

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

3024閲覧

rails ajax対応の記述の仕方

takeke

総合スコア60

Ruby

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2018/05/01 11:39

ecサイトを作成中の者です。Ajax対応した動作を追加したく質問させていただきました。

使用箇所はお気に入り機能です。現在Ajax無しでの動作はお気に入り追加のボタンがありまして、そこを押すとお気に入りに追加されredirect_to root_pathでページが切り替わり、お気に入り追加ボタンが解除ボタンに変わっているというものです。この動作が少し遅いのと、ページ全体が切り替わるのが嫌だったので今回Ajaxに対応させようと思いました。

実は現在カートに商品を追加するという機能にはAjax対応できています。ですがお気に入りの方がうまくいかないので質問させていただきました。

カートの方で使ったやり方を参考に施行錯誤していたのですがうまくいきませんでした。以下コードとエラーを載せます

ターミナルでお気に入り追加した際のエラー文

(5.0ms) commit transaction Rendering favorites/create.js.erb Rendered favorites/create.js.erb (92.7ms) Completed 500 Internal Server Error in 233ms (ActiveRecord: 14.3ms) ActionView::Template::Error (Missing partial favorites/_favorite with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in: * "/vagrant/depot-study/app/views" ): 1: $("#notice").hide(); 2: $('#fav_js').html("<%=j render @favorite %>"); app/views/favorites/create.js.erb:2:in `_app_views_favorites_create_js_erb___975853424_79455600'

お気に入りの解除を行った際のターミナルエラー文

Started DELETE "/products/25/favorites" for 10.0.2.2 at 2018-05-01 11:24:14 +0000 Processing by FavoritesController#destroy as JS Parameters: {"product_id"=>"25"} User Load (1.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 7], ["LIMIT", 1]] CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 7], ["LIMIT", 1]] Favorite Load (2.3ms) SELECT "favorites".* FROM "favorites" WHERE "favorites"."user_id" = ? AND "favorites"."product_id" = ? LIMIT ? [["user_id", 7], ["product_id", 25], ["LIMIT", 1]] (0.1ms) begin transaction SQL (4.4ms) DELETE FROM "favorites" WHERE "favorites"."id" = ? [["id", 43]] (6.1ms) commit transaction No template found for FavoritesController#destroy, rendering head :no_content Completed 204 No Content in 1045ms (ActiveRecord: 14.8ms)

views/favorites/create.js.erb

$("#notice").hide(); $('#fav_js').html("<%=j render @favorite %>");

favorites_controller.rb

class FavoritesController < ApplicationController before_action :authenticate def create @product = Product.find(params[:product_id]) @favorite = current_user.favorites.build(product: @product) respond_to do |format| if @favorite.save format.html{redirect_to store_path, notice: "お気に入りに登録しました"} format.js format.json{head :ok} else format.html{redirect_to store_path, notice:"この商品はお気に入りに登録できません"} end end end def destroy @favorite = current_user.favorites.find_by!(product_id: params[:product_id]) @favorite.destroy respond_to do |format| format.html{redirect_to store_path, notice:"お気に入りを解除しました"} format.js end end end

views/store/index.html.erb

<div id="fav_js" class="store_button"> <% unless session[:user_id].nil? %> <% if product.favorited_by? current_user %> <%= link_to image_tag('no_fav.png', :size => "83x30"), product_favorites_path(product), remote: true ,method: :delete %> <% else %> <%= link_to image_tag('add_fav.png', :size => "83x30"), product_favorites_path(product), remote: true ,method: :post %> <% end %> <% end %> </div>

このような感じです。一応エラーが出ていますが、お気に入り追加や解除ボタン押した後にページ更新すると、押したことにはなっていました。

この場合どこがいけないのか全くわからないので、もしこちらご覧いただけた方で何かお気付きになられる方いましたらご教授の方よろしくお願いしますm(._.)m
正解だけでなく、ここは間違っているというご指摘だけでもとても参考になりますのでお願いいたします。

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

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

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

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

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

guest

回答1

0

Ruby環境がないのであくまで導線引くことしかできませんが
no templateエラーなどはどこかで見たことがあります。
Ajax用にコントローラ用意しててもそのコントローラに対する
テンプレートファイル(View?)を用意する必要がある、だったような。
Ajaxも処理結果を返すための出力は必要なので、そのあたりですね。

teratail内をRuby Ajaxで探したところ、
似たような質問および回答があるように思いましたので、
ご確認ください。

投稿2018/05/01 21:19

m.ts10806

総合スコア80765

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

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

takeke

2018/05/02 10:48

回答ありがとうございます!あれから色々調べたのですが、おっしゃる通り部分テンプレート用のファイルが必要みたいですね。それでそれを用意したのですが未だうまくいきません。参考になりそうな質問も直接解決に届きそうなのはありませんでしたが、少し違うやり方などあったので試している最中です。
m.ts10806

2018/05/02 20:38 編集

現状のコードに更新していただけますか? やってみた経過も追記すると的確な回答をもらえるかもしれません。
takeke

2018/05/16 10:46

遅くなってすみません。新たに質問立ててしまいました。が、現状まだ実装できていません。そちらにもコメントありがとうございます。一旦諦めていましたがまた挑戦したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問