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

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

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

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

jQuery

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

Ajax

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

Q&A

解決済

1回答

1161閲覧

[Rails5][Ajax][jQuery]createアクションが動いていない。@post.saveできない。

uk_63

総合スコア29

Ruby on Rails 5

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

jQuery

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

Ajax

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

0グッド

0クリップ

投稿2018/12/19 07:49

#非同期処理の新規投稿を実現したい
Ajax通信とは??という状態から実装しながら覚えていこうとしているので、うまく現状おきていることも伝えられていないかもしれませんが、ご教授下さい。

Rails5.2, jQuery を使用しています。
モデル Post の新規投稿をAjaxでページ遷移せずに作成したいです。
Railsで投稿の非同期(Ajax)こちらのQiitaの記事を参考にコードを書いてみました。

#困っていること
フォームに入力した文字を投稿一覧画面に表示させることはできていますが、createアクションの@post.saveができていないようで、実際には投稿できていません。入力した文字をただブラウザ上に表示しているだけになっています。

#実際のコード

routes.rb

ruby

1Rails.application.routes.draw do 2...省略 3 resources :posts, :only => [:index, :show, :new, :create, :destroy] 4...省略 5end

posts_controller.rb

ruby

1class PostsController < ApplicationController 2 before_action :login_required, {only: [:index, :show]} 3 4 def index 5 @post = Post.new 6 @posts = Post.all.order(created_at: "DESC") 7 end 8 9...省略... 10 11 def new 12 @post = Post.new 13 end 14 15 def create 16 @post = Post.new(post_params) 17 @post.save 18 render :json => @post.content 19 end 20 21...省略... 22 23 def post_params 24 params.require(:post).permit(:content, :user_id, :image) 25 end 26end 27

posts/_form.html.slim

ruby

1 = form_with model: @post do |f| 2 .form 3 = f.text_area :content, rows: 3, class: "form-control" 4 .form 5 = f.file_field :image, class: "form-control-file" 6 .form 7 = f.submit "投稿する", class: "form_submit"

posts/index.html.slim

slim

1 h3.index_title みんなの投稿 2 3 = form_with model: @post do |f| 4 .form 5 = f.text_area :content, rows: 3, class: "form-control" 6 .form 7 = f.file_field :image, class: "form-control-file" 8 .form 9 = f.submit "投稿する", class: "form_submit" 10 11 12 #post_list_wrapper 13 - @posts.each do |post| 14 #index_list" 15 p= post.content

assets/javascript/application.js

javascript

1 2...省略... 3 4$(function() { 5 $(document).on('ajax:success', 'form', function(e) { 6 $('#post_list_wrapper').prepend('<div id="index_list">'+'<p>' + e.detail[0] + '</p>')+"</div>"; 7 }) 8})

#アドバイスお願いいたします
なぜ投稿が表示だけされて、保存されないのかわからず、お手上げです。どうかお助け下さい。ご回答宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

.saveを返り値のチェック無しで使ってはいけません。今回のように、エラーが起きても無視されてしまいます。

.save!とすると、保存に失敗したときには例外が起きるようになりますので、例外の内容を見て、どう改良すべきかの判断もできるようになります。

投稿2018/12/19 07:55

maisumakun

総合スコア145184

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

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

uk_63

2018/12/19 08:06 編集

>> maisumakun さん ご回答ありがとうございます。 .save!に変更したところ、 検証画面のConsoleに下記のエラーが表示されました。 ↓↓↓↓↓↓ Failed to load resource: the server responded with a status of 422 (Unprocessable Entity) また、サーバーログには下記エラーが表示されました。 ↓↓↓↓↓↓ Started POST "/posts" for 127.0.0.1 at 2018-12-19 16:56:54 +0900 Processing by PostsController#create as JS Parameters: {"utf8"=>"✓", "authenticity_token"=>"de81frcb1hEbv3Cv3Hb41BlmoEyXwl8L1Td8YAr9B+L2qwVo3t/VgY+g+ERerEtM9zEfC/kOovqUOh1+AlTEyA==", "post"=>{"content"=>"こんにちは"}, "commit"=>"投稿する"} User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 8], ["LIMIT", 1]] ↳ app/controllers/application_controller.rb:5 (0.2ms) BEGIN ↳ app/controllers/posts_controller.rb:20 (0.2ms) ROLLBACK ↳ app/controllers/posts_controller.rb:20 Completed 422 Unprocessable Entity in 12ms (ActiveRecord: 0.8ms) ActiveRecord::RecordInvalid (Validation failed: User can't be blank, User must exist): app/controllers/posts_controller.rb:20:in `create' これは、つまり新規投稿とuserを紐付けられたら、エラー解消ということですか? もしそうであれば、その方法をアドバイスいただけますでしょうか? 宜しくお願いします。
maisumakun

2018/12/19 08:08

そうですね、Ajaxで投げたデータにuser_idがないのが要因かと思います(ログイン中のアカウントと紐付ける場合はコントローラーでの処理が必要となります)。
uk_63

2018/12/19 08:12

>> maisumakun さん 新規投稿とユーザを紐付ける事によって、投稿にせいこうしました。 アドバイス、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問