NoMethod Error in Posts#show에 대한 해결 방법(직접 필기)

7047 단어 RubyRails
현재 강좌루비 온 레일스의 학습을 따라 추진하는 초보자입니다.

NoMethodError in Posts#Show 오류


각 사용자의 발언 상세 정보를 표시하려고 시도할 때 이러한 오류가 발생했습니다
RubbyOnRails를 사용한 기고용 제작 ②(화면제작편)
참고로 작업 중의 각 목록은 다음과 같다.
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

privte 이전에 기술하는 방법을 통해 해결


해결 방법은 이쪽 사이트 참조↓

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
방법은 privete 앞에 놔야 돼요!
따라서 privte 이전에 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
투고 상세 페이지가 순조롭게 표시되었다.
NoMethodError in Posts#show ;
만약 무슨 잘못이 있으면 저에게 연락 주세요!

좋은 웹페이지 즐겨찾기