#非同期処理の新規投稿を実現したい
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})
#アドバイスお願いいたします
なぜ投稿が表示だけされて、保存されないのかわからず、お手上げです。どうかお助け下さい。ご回答宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/19 08:06 編集
2018/12/19 08:08
2018/12/19 08:12