前提・実現したいこと
◆投稿内容をブログ形式にしたい
現在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
回答1件
あなたの回答
tips
プレビュー