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

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

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

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

Ruby

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

Q&A

解決済

1回答

1617閲覧

Railsチュートリアルのサンプルアプリの改造にて、投稿がDBに保存されない、Feedにも表示されない。

tahataha

総合スコア7

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2018/06/18 08:43

前提・実現したいこと

◆投稿内容をブログ形式にしたい

現在railsチュートリアルのサンプルアプリに機能を追加するコードを書いています。その中で、投稿の形式をブログ形式の文章を投稿できる形にしようとしています。
ブログ形式に関しては、はタイトル、テキスト、タグの3つが投稿できる形にしようとしています。(サンプルアプリのままだと簡単な150文字程度の文章のみ)

◆でも投稿内容がDBに保存されない

目指す挙動としては、投稿したら投稿直後にroot_urlにリダイレクトし、Feedにその投稿が表示されるという流れです。
現在投稿のフォームをタイトル、テキスト、タグの3つを表示させるところまで実装しました。実際にプレビューのアプリでそのフォームに書き込み投稿ボタンを押したらroot_urlにリダイレクトはされるのですが投稿内容がDBに保存されない状況です。(DBのテーブルのなかを実際に確認しました)DBに保存されていないので当然投稿直後にFeedの中にも表示されません。

この問題を解決するためにどなたかお力をお貸しください、、!

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

エラーで怒られる訳ではありませんが、上記の通り投稿がDBに保存されていない、そのためFeedにも表示されないという状況です。

該当のソースコード

Ruby

1#micropost.rb 2 3class Micropost < ApplicationRecord 4 enum tag: { bussiness: 1, art: 2, development: 3, sport: 4 } 5 6 ALLOWED_PARAMS = [:id, :title, :tag, :text] 7 8 belongs_to :user 9 default_scope -> { order(created_at: :desc) } 10 mount_uploader :picture, PictureUploader 11 validates :user_id, presence: true 12 validates :title, presence: true 13 validates :tag, presence: true 14 validates :text, presence: true 15 validate :picture_size 16 17 private 18 19 # アップロードされた画像のサイズをバリデーションする 20 def picture_size 21 if picture.size > 1.megabytes 22 errors.add(:picture, "should be less than 1MB") 23 end 24 end 25end
#micropost_controller.rb class MicropostsController < ApplicationController before_action :logged_in_user, only: [:create, :destroy] before_action :correct_user, only: :destroy def index @search_microposts = Micropost.search(params[:search]) end def readyfor @micropost = current_user.microposts.build if logged_in? end def create @micropost = current_user.microposts.build if logged_in? if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else @feed_items = current_user.feed.paginate(page: params[:page]) render 'static_pages/home' end end def destroy @micropost.destroy flash[:success] = "Micropost deleted" redirect_to request.referrer || root_url end def edit end private def micropost_params params.require(:micropost).permit(:text, :tag, :title) end def correct_user @micropost = current_user.microposts.find_by(id: params[:id]) redirect_to root_url if @micropost.nil? end end

試したこと

プレビュー画面のパラメータ情報の最後の行に

permitted: false

の表示がありこれが原因なのではないかと思い、藁にもすがる思い出、micropost_paramsメソッドのpermitの引数にtext,tag,titleと加えたのですが、状況変わりません。。DBのなかに実際にこの3つのカラムは存在するようです。

補足情報(FW/ツールのバージョンなど)

Ruby on Rails 5.1.4
ruby 2.4.1
cloud9

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

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

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

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

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

ryochin

2018/06/18 12:10

def update 、つまりデータを更新するコードが見当たりません。HTML も示すとよいかもしれません。
guest

回答1

0

ベストアンサー

createメソッド★の行を修正しました。

def create @micropost = current_user.microposts.build(micropost_params) if logged_in? ★ if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else @feed_items = current_user.feed.paginate(page: params[:page]) render 'static_pages/home' end end

多分、ここじゃないかな~と思います。
buildしたときに、micropost_paramsメソッドを引数にすることで
postで送ったデータを@micropostに追加できます。

コンソール画面には、SQL文が表示されますか?
micropost_paramsを渡してない状態だと、insert文に必要なデータ(:text,:tag,:title)が入ってないのでは?

投稿2018/06/26 14:31

dobby618

総合スコア302

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

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

tahataha

2018/07/01 05:32

回答ありがとうございます! おっしゃる通り必要なデータは入っていませんでした。。 修正していただいた通り引数にmicropost_paramsを追加することで投稿がDBに保存され、feedにも表示されるようになりました。 本当に助かりました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問