Ruby on Rails でトレーニング投稿サイトを作っています。
コメント投稿機能を実装中に以下のエラーメッセージが発生しました。
実現したいことは、投稿一覧画面で任意の投稿に対してコメントを作成し、表示させる様にしたいです。
##該当のソースコード
ruby
1class PostsController < ApplicationController 2 before_action :authenticate_user! 3 4 def index 5 @posts = Post.all 6 @coments = @post.coments 7 @coment = Coment.new 8 end 9 10 def show 11 @post = Post.find(params[:id]) 12 @coments = @post.coments.build 13 @coment = Coment.build 14 end 15 16 def new 17 @post = Post.new 18 end 19 20 def create 21 @post = Post.new(post_params) 22 if @post.save 23 redirect_to root_path 24 else 25 render "new" 26 end 27 end 28 29 def destroy 30 post = Post.find(params[:id]) 31 if post.user_id == current_user.id 32 post.destroy 33 end 34 redirect_to user_path(current_user) 35 end 36 37 38 private 39 def post_params 40 params.require(:post).permit(:memo, :image,:menu1,:menu2,:menu3,:menu4,:menu5 ).merge(user_id: current_user.id) 41 end 42 43end 44
##関連ファイルのソースコード
ルーティング
ruby
1Rails.application.routes.draw do 2 get 'users/show'=> "users#show" 3 devise_for :users, controllers: { registrations: 'users/registrations' } 4 5 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 6 root to: "posts#index" 7 resources :posts, only: [:index, :new, :create,:destroy] 8 resources :users, only: [:show, :new, :edit] 9 resources :coments, only: [:create] 10end 11 12
コメントコントローラー
ruby
1class ComentsController < ApplicationController 2 before_action :authenticate_user! 3 4 def create 5 post = Post.find(params[:post_id]) 6 @coment = post.coments.build(coment_params) 7 @coment.user_id = current_user.id 8 if @coment.save 9 redirect_back(fallback_location: root_path) 10 else 11 redirect_back(fallback_location: root_path) 12 end 13 14 end 15 16 private 17 def coment_params 18 params.require(:coment).permit(:text,:post_id,:user_id) 19 end 20end 21 22end 23
投稿一覧画面
ruby
1.wrapper 2 - @posts.each do |post| 3 .main 4 .main__content 5 = link_to user_path(post.user), class:"main__content__profile" do 6 .main__content__profile__image 7 - if post.user.image? 8 = image_tag post.user.image.url,class:"icon" 9 - else 10 = image_tag "/icon/ifn0013.png",class:"icon" 11 .main__content__profile__list 12 .main__content__profile__list__name 13 = post.user.name 14 .main__content__profile__list__day 15 = post.created_at.strftime("%Y年%m月%d日 %H時%M分") 16 .main__content__list 17 .main__content__list__text 18 .main__content__list__text__title 19 一言メモ 20 .main__content__list__text__detail 21 = post.memo 22 .main__content__list__menuImage 23 .main__content__list__menuImage__menu 24 .main__content__list__menuImage__menu__title 25 トレーニングメニュー 26 .main__content__list__menuImage__menu__detail 27 .main__content__list__menuImage__menu__detail__1 28 = post.menu1 29 .main__content__list__menuImage__menu__detail__1 30 = post.menu2 31 .main__content__list__menuImage__menu__detail__1 32 = post.menu3 33 .main__content__list__menuImage__menu__detail__1 34 = post.menu4 35 .main__content__list__menuImage__menu__detail__1 36 = post.menu5 37 .main__content__list__menuImage__image 38 .main__content__list__menuImage__image__title 39 画像 40 .main__content__list__menuImage__image__detail 41 = image_tag post.image.url 42 .main__content__list__coments 43 .hidden_box 44 %label{:for => "label1"} コメントを見る ( 1.クリック 2.スクロールして確認) 45 %input#label1{:type => "checkbox"} 46 .hidden_show 47 .hidden_show__coments 48 .hidden_show__coments__profile 49 = link_to root_path do 50 .hidden_show__coments__profile__image 51 = image_tag "/icon/ニューヨーク.jpg",class:"icon" 52 .hidden_show__coments__profile__name 53 たけ 54 .hidden_show__coments__profile__day 55 2020年6月1日 56 .hidden_show__coments__box 57 アイウエオ 58 .hidden_show 59 .hidden_show__coments 60 .hidden_show__coments__profile 61 = link_to root_path do 62 .hidden_show__coments__profile__image 63 = image_tag "/icon/ニューヨーク.jpg",class:"icon" 64 .hidden_show__coments__profile__name 65 たけ 66 .hidden_show__coments__profile__day 67 2020年6月1日 68 .hidden_show__coments__box 69 アイウエオ 70 .main__content__list__coments 71 = form_with(model: [@post, @coment], local: true) do |f| 72 = f.text_field :text 73 = f.hidden_field :post_id, value: @post.id 74 = f.submit 'コメントする', class: "btn btn-primary"
postマイグレーションファイル
ruby
1class CreatePosts < ActiveRecord::Migration[5.2] 2 def change 3 create_table :posts do |t| 4 t.text :memo , null: false 5 t.text :menu1 , null: false 6 t.text :menu2 7 t.text :menu3 8 t.text :menu4 9 t.text :menu5 10 t.string :image 11 t.references :user , null: false,foreign_key: true 12 t.timestamps 13 end 14 end 15end
postモデル
ruby
1class Post < ApplicationRecord 2 belongs_to :user 3 has_many :coments 4 mount_uploader :image, ImageUploader 5 6 validates :memo, presence: true 7 validates :menu1, presence: true 8 9end
coment マイグレーションファイル
ruby
1class CreateComents < ActiveRecord::Migration[5.2] 2 def change 3 create_table :coments do |t| 4 t.text :text ,null: false 5 t.references :post ,null: false, foreign_key: true 6 t.references :user ,null: false, foreign_key: true 7 t.timestamps 8 end 9 end 10end
comentモデル
ruby
1class Coment < ApplicationRecord 2 belongs_to :post,optional: true 3 belongs_to :user 4end
##試したこと
まだコメントが投稿されていないことによるエラーだと判断し、postコントローラの
ruby
1@coments = @post.coments 2@coment = Coment.new
をコメントアウトしてみましたが以下のエラーがでます。
Nil location provided. Can't build URI.
コメントを作るために上記のコードを記述していたので、消してはいけないと思いますが、消さないと進まない様な、
堂々巡りです。
エラーについて検索しましたが、思う様なものが見つからず、2日間程経過しています。
どなたかご教授いただけないでしょうか?
よろしくお願い致します。
##補足情報(FW/ツールのバージョンなど)
MacBook Pro 13
macOs 10.15.4
rails 5.2.3
PostgreSQL. Versions 9.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/24 11:52