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

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

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

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

Ajax

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

Q&A

解決済

2回答

1963閲覧

Rails remote:true で挙動がかわらない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

Ajax

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

0グッド

0クリップ

投稿2018/08/28 08:54

Rails の remote:true の使い方がよくわかりません

views/test.html.erb

lang

1link_to "test", test_path, remote:true

とかいたところ

<a href="/test" data-remote="true">test</a>

というリンクが生成されたんですが

views/test.js

lang

1alert("test");

を同じところにおいてリンクをふんでもページ遷移がおきて test.html.erb が表示されるだけでした

この JS が ajax で実行されてページ遷移せずにポップアップがでると思ってたんですが認識が違うんでしょうか
以前1度 remote:true で view の中の JS を動かしたような気がしたんですが…

動かしてる Rails は自分でくんだものではないので ajax を無効にする何か特殊な設定がしてあるんでしょうか…

Rails バージョンは 4.2.3 です

何かヒントをいただけたらありがたいです

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

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

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

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

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

guest

回答2

0

ベストアンサー

application.js に

require jquery_ujs

を追加したところ動くようになりました

参考:
http://d.hatena.ne.jp/mercystage/20130207/1360173048

投稿2018/08/30 07:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

controller側がAjaxに対応していない可能性があります。

respond_to do |format| format.html { redirect_to user } format.js end

のようなコードがcontrollerに書かれていなければ、追記が必要かと思います。

投稿2018/08/29 11:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/08/30 02:43

routes.rb に追加しただけでコントローラには何も追加してないです… 以前同じように remote:true で作った別のシステムの Rails ログをみると Processing by ... as JS っていうのがリンクを踏んだ瞬間流れるんですが いまさわってるシステムでは Processing by ... as HTML になっていました remote:true 以外にもリンク先を JS として認識させる設定みたいなのが必要なんでしょうか
退会済みユーザー

退会済みユーザー

2018/08/30 05:10 編集

なるほど。。。 remote: trueは、「該当のボタンやリンクを押したときにAjax通信するよ!!」という意味だと自分は認識しています。 ページ遷移が起きるのは、Ajax通信でも、そうでなくても、redirectするような記載がcontrollerのメソッドに書かれているからだと思います。 test_pathで実行されるコントローラのアクションに、上記のrespond_toの記載を入れると、 htmlの場合はredirectし、js(Ajax通信)の場合は処理がないので、controllerでは何もせず、次にViewを見に行きます。そのときに該当のviews/test.jsを見に行ってくれるはずです!!
退会済みユーザー

退会済みユーザー

2018/08/30 06:06

コントローラーに記述はかいたんですが全くかわらなかったです ``` def test print '********** test ************' end ``` とかいてもメッセージも表示されないし何が何だか… そもそもコントローラーのアクションがよばれてない気がしてきました… ただいずれにしろコントローラをよんだ時点ですでに Processing as HTML となってるので そもそもremote:true => HTML に data-remote="true" がつくだけで ajax になるっていうのは HTML? ブラウザ? Rails? の仕様なんでしょうか Rails の仕様なのだとしたらその機能がうまくうごいてない可能性もあるのかなと思ってるんですが 何から調べたらいいかもよくわかってない感じです
退会済みユーザー

退会済みユーザー

2018/08/30 06:22

↑コントローラーを通らなかったのは途中に private ってかかれてたのに最後に追加したからでした>< コントローラ内で print format をしてみたんですが HTML になってたのでやはりリクエスト側の問題な気がします
退会済みユーザー

退会済みユーザー

2018/08/30 06:28

今回のremote: trueはlink_toメソッドのオプションとなるので、railsの仕様になりますね。 もしよろしければroute.rbとtests_controller.rb(かな。。。?route.rbにもよりますが。。。)の内容を記載していただけると幸いです。
退会済みユーザー

退会済みユーザー

2018/08/30 07:23

ぜんぜん関係ないところが原因でした… せっかくいろいろ回答していただいたのにすいません><
退会済みユーザー

退会済みユーザー

2018/08/30 07:36

なるほど!! 解決できてよかったです!!自分もその観点はなかったので勉強になりましたw ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問