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

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

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

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

Ruby

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

JavaScript

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

jQuery

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

Ajax

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

Q&A

1回答

563閲覧

rails5で画面遷移しない投稿機能

akiakiakirin

総合スコア13

Ruby on Rails 5

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

Ruby

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

JavaScript

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

jQuery

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

Ajax

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

0グッド

0クリップ

投稿2018/09/28 07:22

編集2018/09/30 14:19

Rails5でAjaxを使って画面遷移をしない投稿機能を作りたいです。

https://ysk-pro.hatenablog.com/entry/2018/02/10/101739

上のサイトを参考に実装しているのですがうまくDBに保存できず困っています。

個人的にはjavascript(index.js.erb)が機能していないのではないかと思っているのですがその辺りもどうすればいいのか調べてもわかりません。

どなたかご教授いただけないでしょうか。

ローカル
イメージ説明

views/index.js.erb

$("#comments_area").html("<%= (render 'index', { contents: @content.post.contents }) %>") $("textarea").val('')

views/show.html.erb

<div class="comment"> <h4>コメント</h4> <div id="comments_area"><!-- #① --> <!-- 投稿されたコメント一覧をブログの詳細ページに表示するためのrender --> <%= render partial: 'fc_contents/index', locals: { contents: @contents } %> </div> <% if user_signed_in? %> <!-- コメント入力欄をブログの詳細ページに表示するためのrender --> <%= render partial: 'fc_contents/new', locals: { contents: @content, post: @post } %> <% end %> </div>

views/fc_contents/show.html.erb

<div class="comment"> <h4>コメント</h4> <div id="comments_area"><!-- #① --> <!-- 投稿されたコメント一覧をブログの詳細ページに表示するためのrender --> <%= render partial: 'fc_contents/index', locals: { contents: @contents } %> </div> <% if user_signed_in? %> <!-- コメント入力欄をブログの詳細ページに表示するためのrender --> <%= render partial: 'fc_contents/new', locals: { contents: @content, post: @post } %> <% end %> </div>

views/fc_contents/_new.html.erb

<%= form_with(model: [@post, @content] ) do |form| %> <div class="comment-textarea"> <%= form.text_area :content_body %> </div> <div class="actions"> <%= form.submit "コメントをする" %> </div> <% end %>

views/fc_contents/_index.html.erb

<!-- <div class="main"> --> <div class="btn btn-size-large"> <!-- リンクにファンクラブのidを入れている --> <%= link_to("コンテンツを投稿する", "/fc_contents/new/#{@post.id}") %> </div> <!-- ファンクラブオーナーのタイムライン --> <div class="orner-container"> <!-- 現在のpostのコンテンツって意味 --> <% @post.contents.each do |content| %> <% if @post.user_id == content.user_id %> <li class="orner-timeline"> <div class="content-member-img"> <% if content.user_id %> <%= link_to image_tag("/user_images/#{content.user_id}.jpg"), "/home/profile/#{content.user_id}" %> <% else %> <img src="<%= "/default_image.jpg" %>"> <% end %> </div> <%= link_to(content.content_body, "/fc_content/#{content.id}") %> </li> <% end %> <% end %> </div> <div class="snap-drawers"> <div class="snap-drawer snap-drawer-right"> <!-- メニューの部分 --> <div class="member-timeline-container"> <!-- 現在のpostのコンテンツって意味 --> <% @post.contents.each do |content| %> <% if @post.user_id != content.user_id %> <li class="member-timeline"> <div class="content-member-img"> <% if content.user_id %> <%= link_to image_tag("/user_images/#{content.user_id}.jpg"), "/home/profile/#{content.user_id}" %> <% else %> <img src="<%= "/default_image.jpg" %>"> <% end %> </div> <p class="content-id">投稿ID:<%= content.id %> ユーザー:<%= content.user_id %> <span class="created-at"><%= time_ago_in_words(content.created_at)%></span></p> <div class="member-timeline-body"> <%= link_to(content.content_body, "posts/#{content.id}/fc_contents") %> </div> </li> <% end %> <% end %> </div> </div> <div id="content" class="snap-content"> <!-- ドロワーメニューを開くボタン --> <a href="#" id="open-right">タイムライン</a> <!-- コンテンツ部分 --> </div> <script type="text/javascript"> // 基本的な記述です。コンテンツ部分のID名を書いておきましょう。 var snapper = new Snap({ element: document.getElementById('content') }); // 以下はフリックやドラッグだけでなく、ボタンでも開いたり閉じたりできるようにする記述です。 var addEvent = function addEvent(element, eventName, func) { if (element.addEventListener) { return element.addEventListener(eventName, func, false); } else if (element.attachEvent) { return element.attachEvent("on" + eventName, func); } }; // ボタンのID名と揃えておきましょう。 addEvent(document.getElementById('open-right'), 'click', function(){ snapper.open('bottom'); }); </script>

views/fc_contents_controller.erb

class FcContentsController < ApplicationController before_action :authenticate_user! def index @post = Post.find_by(id: params[:id]) # ここでorderしてもダメだからfc_content.rbで書いている # @contents = FcContent.all.order(created_at: :desc) @content = FcContent.new @contents = @post.contents end def show @post = Post.find_by(id: params[:id]) @content = FcContent.find_by(id: params[:id]) @content = FcContent.new # @contents = @post.contents end def new @content = FcContent.find_by(id: params[:id]) @post = Post.find_by(id: params[:id]) end def create @post = Post.find_by(id: params[:id]) # form_tagに@post.idを含ませて現在のfc.idを取得している @content = FcContent.new(content_body: params[:content_body], user_id: current_user.id) if @content.save # リダイレクトの後にpost.idがついたurlに戻る redirect_to("/fc_contents/index/#{@post.id}") render("index") else render("new") end end private def content_params params.require(:content).permit(:content_content_body, :post_id, :user_id) end end

イメージ説明

イメージ説明

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

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

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

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

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

guest

回答1

0

ストロングパラメーターの問題な気がします。
fc_contents_controller.rbのprivateのところに

lang

1private 2 def fccontent_params 3 params.require(:fc_content).permit(:content_body) 4 end 5end

をつけて

rb

1 def create 2 @post = Post.find_by(id: params[:id]) 3 # form_tagに@post.idを含ませて現在のfc.idを取得している 4 @content = FcContent.new(content_body: fccontent_params[:content_body], 5 user_id: current_user.id)

に変更

投稿2018/09/30 09:11

asm

総合スコア15147

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

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

akiakiakirin

2018/09/30 14:21

回答ありがとうございます! 上記の通りに直して試したのですが画像のようなエラーが出てしまいます。 fc_contents_pathが定義されていないということですがこれがどこを直せばいいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問