新規投稿画面でpost_pathの未定義エラーが発生します。
新規投稿の空投稿に対するエラーメッセージを表示するために実装しているときに起きている事象です。
undefined method `posts_path' for #<#<Class:0x00007f880a71ddd0>:0x00007f880a727e70>
new.html.erb
1 <div class="main posts-new"> 2 <div class="container"> 3 <h1 class="form-heading"style="text-align: center">投稿する</h1> 4 <%= form_with(model: @post, local: true) do |form| %> 5 <div class="form"> 6 <div class="form-body"> 7ここから 8 <% @post.errors.full_messages.each do |message| %> 9 <div class="form-error"> 10 <%= message %> 11 </div> 12 <% end %> 13ここまで 14 <div> 15 <%= form.label :comment, "ひとこと" %> 16 <%= form.text_field :comment %> 17 </div> 18 19 <div> 20 <%= form.label :url, "URL" %> 21 <%= form.text_field :url %> 22 </div> 23 <div> 24 <%= form.label :content, "概要" %> 25 <%= form.text_area :content %> 26 </div> 27 28 29 <div> 30 <%= form.submit "投稿する", data: { confirm: '上記の内容で投稿を作成します。よろしいですか?' } %> 31 </div> 32 </div> 33</div> 34 <% end %> 35 </div> 36</div>
post_controller.rb
1class PostsController < ApplicationController 2 before_action :authenticate_user 3 before_action :ensure_correct_user, {only: [:destroy]} 4 def index 5 @posts = Post.all.order(created_at: :desc) 6 end 7 8 9 def show 10 @post = Post.find_by(id: params[:id]) 11 @user = @post.user 12 @likes_count = Like.where(post_id: @post.id).count 13 end 14 15 def new 16 @user = User.new 17ここから 18 @post = Post.new 19ここまで 20end 21 22 def create 23 @post = Post.new(posts_params) 24 25 if @post.save 26 flash[:notice] = "投稿完了" 27 redirect_to("/posts/index") 28 else 29 render("/posts/new") 30 end 31 32 end 33 34 def posts_params 35 #投稿内容をパラメータで受け取る 36 params.permit(:comment, :site, :url, :content, :tag).merge(user_id: @current_user.id) 37 end 38 39 40 def edit 41 @post = Post.find_by(id: params[:id]) 42 end 43 44 def destroy 45 @post = Post.find_by(id: params[:id]) 46 @post.destroy 47 flash[:notice] = "投稿を削除しました" 48 redirect_to("/posts/index") 49 end 50 51 def ensure_correct_user 52 @post = Post.find_by(id: params[:id]) 53 if @post.user_id != @current_user.id 54 flash[:notice] = "権限がありません" 55 redirect_to("/posts/index") 56 end 57 end 58end
ここからここまでの2箇所を削除するとエラーなく新規投稿画面に遷移できるのですが
エラーの真因がわかりません。
また今までcontrollerに@postがなかったのに処理が通っていたのもよくわかりません。(create処理の@postを参照していたから?)
この真因と解決策についてご教授宜しくお願い致します。
user.rb
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable, :confirmable 6 validates :name, {presence: true, uniqueness: true} 7 validates :email, {presence: true, uniqueness: true} 8 validates :password,{presence: true} 9 10 def posts 11 return Post.where(user_id: self.id) 12 end 13 14 def update_without_current_password(params, *options) 15 params.delete(:current_password) 16 17 if params[:password].blank? && params[:password_confirmation].blank? 18 params.delete(:password) 19 params.delete(:password_confirmation) 20 end 21 22 result = update_attributes(params, *options) 23 clean_up_passwords 24 result 25 end 26 end 27
routes.rb
1Rails.application.routes.draw do 2 devise_for :users, controllers: { 3 registrations: "users/registrations" 4 5 } 6 post "users/:id/update" => "users#update" 7 post "likes/:post_id/create" => "likes#create" 8 post "likes/:post_id/destroy" => "likes#destroy" 9 get "users/:id/edit" => "users#edit" 10 # post "users/create" => "users#create" 11 get "users/:id" => "users#show" 12 post "login" => "users#login" 13 get "login" => "users#login_form" 14 post "logout" => "users#logout" 15 16 17 get "users/:id/likes" => "users#likes" 18 19 # get "signup" => "users#new" 20 21 get "posts/index" => "posts#index" 22 get "posts/new" => "posts#new" 23 get "posts/:id" => "posts#show" 24 post "posts/new" => "posts#create" 25 post "posts/create" => "posts#create" 26 post "posts/:id/destroy" => "posts#destroy" 27 get "/" => "home#top" 28 get "about" => "home#about" 29end 30
回答1件
あなたの回答
tips
プレビュー