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

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

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

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

Ruby on Rails 6

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

JavaScript

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

Ajax

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

Q&A

1回答

1902閲覧

【Ajax,Rails】ブログの自動保存機能で、新しいpostをcreateし続けてしまう問題

piki

総合スコア0

Ruby

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

Ruby on Rails 6

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

JavaScript

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

Ajax

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

0グッド

0クリップ

投稿2020/05/06 03:30

編集2020/05/06 03:32

前提・実現したいこと

Ruby on Rails6を使って、自動保存機能がついたブログエディター(Wordpressのようなもの)を作っています。

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

こちらの記事をほぼそのままコピペして、自動保存機能自体は実現することができました。

しかし、上記の参考記事でも言及されている、以下の部分の問題が解決できません。

一回目の一時保存は普通にcreate_tempアクションに飛んでもらって良いんだけど、次のタイミング(例えば1分に1回保存するとかする場合)では、もうそのレコードはあるんだから、updateアクションに飛んでもらわないと困る。

つまり、2回目以降のAjax送信時はupdateしてほしいのに、createし続けてしまいます。
ちなみに、ブログのedit画面からの自動保存は問題なく動作しており、
createし続けてしまうのはnew画面からの自動保存時のみです。

具体的にお聞きしたいのは、以下2点です。

①番号リスト先ほどの参考記事中の以下部分で何をしようとしているのか、わかりやすく教えていただけないでしょうか。

javascript

1if (result == true) { 2 msg = "下書き保存されました"; 3 4 // This is for Temporal saving 5 // forcing the form to look update method. 6 7 // Add id 8 $('.blog-form').prepend('<input name="post[id]" type="hidden" value="<%= @post.id %>">'); 9 10 // Chnage REST method 11 $('.blog-form input[name=_method]').remove(); 12 $('.blog-form').prepend('<input name="_method" type="hidden" value="patch">'); 13 14 // Change URL 15 $('.blog-form').attr('action', '/posts/<%= @post.id %>'); 16 17} else { 18 msg = "下書き保存のための情報が足りません"; 19}

②上記部分がうまく動作しない理由として、何が考えられるでしょうか。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

引用先は見ておらずでの回答です。

$('.blog-form').prepend('<input name="post[id]"
'.blog-form'に name="post[id]" な input要素を追加

$('.blog-form input[name=_method]').remove();
.blog-form にある 「submitされた時のmethd」定義w削除

$('.blog-form').prepend('<input name="_method" ..
.blog-form がsubmitされた時のmethdを patch に設定

$('.blog-form').attr('action', '/posts/<%= @post.id %>');
'.blog-form' のaction(submitした時にcontrollerのどのactionを呼ぶか)を変更。というより、paramsのIDの値を変更ですね。

②初めは常にPOST methodにしているのでは、とおもったのですが、PATCHに変更していますね。
とすると、
(1)にも関わらず,ブラウザーがPOSTで送っている。
(2)routes.rbにて、PATCHでのrouteが定義されていない

私の経験ですと(1)が結構あります。解消方法未だわからず。
(1)であるかどうかは、logで Started とある行を探して確認してください。GET、POST、PATCH などになっています。

投稿2020/05/07 06:36

winterboum

総合スコア23416

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問