NoMethodError in Posts#show の解決方法について(自分用メモ)
現在、チュートリアルRubyOnRailsで投稿アプリを作ろう②(画面作成編)に沿ってRuby on railsの学習を進めている初心者です。
NoMethodError in Posts#showというエラー
各ユーザーの投稿の詳細を表示しようとしたところ、こんなエラーが出てしまいました・・・
ちなみに、作業中の各ディレクトリは以下のとおりです。
post_controller.rb
# Applicationcontrollerクラスを継承することで、クラスがコントローラと認識される
class PostsController < ApplicationController
def index
# 投稿データを全て取得、またインスタンス変数なのでViewで参照可能
@posts = Post.all
end
#ルーティングの変更後に追加
def new
#Postモデルのオブジェクトを作成
# @postはインスタンス変数でviewで参照可能
@post = Post.new
end
def create
#データはparamsという変数に渡されている
#createはPostモデルのクラスメソッド
Post.create(post_params)
end
private
#paramsから欲しいデータのみ抽出
def post_params
params.require(:post).permit(:name, :title, :content)
end
# findメソッドで、idにひもづくPOSTオブジェクトを取得する
def show
@post = Post.find(params[:id])
end
end
show.html.erb
<div class="d-flex align-items-center mt-4 mb-4">
<div class="ml-auto posts_button">
<a class="btn btn-outline-info" href="/posts" role="button">投稿一覧</a>
<a class="btn btn-outline-info" href="/posts" role="button">編集</a>
</div>
</div>
<div class="card">
<div class="card-header bg-info text-white">
<h4><%= @post.title %></h4>
</div>
<div class="card-body">
<p class="card-text"><%= simple_format(@post.content) %></p>
</div>
<div class="card-footer">
<p class="text-right font-weight-bold mr-10"><%= @post.name %></p>
</div>
</div>
routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
# root -> ルートパス(localhost:3000)でアクセスした場合に割り当てられる設定で、Controllerファイルに記述するindexメソッドを実行するように定義
get 'posts', to: 'posts#index'
#投稿ページを表示
get 'posts/new', to: 'posts#new'
#投稿データの作成
post 'posts', to: 'posts#create'
# 投稿ページ表示(追加)
get 'posts/:id', to: 'posts#show'
end
db/migrate
$ rails generate model post name:string title:string content:textを実行すると、dbディレクトリ配下にマイグレーションファイルが作成される
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :posts do |t|
t.string :name
t.string :title
t.text :content
t.timestamps
end
end
end
privateより先にメソッドを記述することで解決
解決方法についてこちらのサイトを参考に↓
NoMethodError in Posts#show ;
All methods defined after private are accessible only internally. Move the show method above private. And make sure you have a file called app/views/posts/show.html.erb and not .rb
メソッドはprivateの前におかなきゃだよー!
とのことでしたので、以下のとおりprivateの前にshowメソッドを移動させました。
posts_contoroller.rb
・
・
・
# findメソッドで、idにひもづくPOSTオブジェクトを取得する
def show
@post = Post.find(params[:id])
end
private
#paramsから欲しいデータのみ抽出
def post_params
params.require(:post).permit(:name, :title, :content)
end
end
投稿詳細ページが無事表示されました!
何か間違っていることなどありましたらご連絡ください!
Author And Source
この問題について(NoMethodError in Posts#show の解決方法について(自分用メモ)), 我々は、より多くの情報をここで見つけました https://qiita.com/_ayk_study/items/d08a0698bce2e9503c62著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .