Получение "ActiveRecord :: RecordNotFound в PostsController # show" из ниоткуда

Хорошо, я пытаюсь отобразить index.html, и RoR показывает мне, что что-то не так с ... def show in posts_controller ... Хорошо?

Итак, index.html.erb

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <% @posts.each do |post| %>
    <div class = "post_wrapper">
        <h2 class = "title"><%= link_to post.title, post%></h2>
        <p class = "date"><%= time_ago_in_words(post.created_at)%></p>
    </div>
    <% end %>
</body>
</html>

posts_controller.rb

class PostsController < ApplicationController
    def index
        @posts = Post.all.order('created_at DESC')
    end

    def new
    end

    def create
        @post = Post.new(post_params)
        @post.save

        redirect_to @post
    end
    def show
        @post = Post.find(params[:id])
    end
    private

        def post_params
            params.require(:post).permit(:title, :body)
        end    
end

Я предполагал, что это потому, что не было атрибута, такого как ID, поэтому я заменил params[:id] на params[:title] и все равно получил ту же ошибку.

Не могли бы вы объяснить, что не так и что нужно исправить?

Пожалуйста, проверьте журнал ошибок. Это как ActiveRecord::RecordNotFound: Couldn't find Post without an ID или ActiveRecord::RecordNotFound: Couldn't find User with 'id'=?

ray 29.12.2018 11:54

Можете ли вы опубликовать URL-адрес, который у вас есть в адресной строке?

iGian 29.12.2018 12:26

@ray, значит, это ActiveRecord::RecordNotFound in PostsController#show, а затем Couldn't find Post with 'id'=index.

Aleksander Jess 29.12.2018 13:55

@iGian локальный: 3000 / сообщений / индекс

Aleksander Jess 29.12.2018 13:55

@iGian, это все, что я получаю в окне консоли, где у меня работает rails s: ActiveRecord :: RecordNotFound (не удалось найти сообщение с 'id' = index): app / controllers / posts_controller.rb: 16: in show 'Начато GET "/ posts / index" для 127.0.0.1 в 2018-12-29 13:53:08 +0100 Обработка с помощью PostsController # показать как параметры HTML: {"id" => "index"} Post Load (0.5ms) SELECT "posts". * FROM "posts" WHERE "posts". "id" =? LIMIT? [["id", 0], ["LIMIT", 1]] Завершено 404, не найдено за 4 мс (ActiveRecord: 0,5 мс) `

Aleksander Jess 29.12.2018 14:19

по какой-то причине я не могу отформатировать текст

Aleksander Jess 29.12.2018 14:22

URL-адреса @AleksanderJess в стиле /posts/something предназначены для отображения одного сообщения с идентификатором «что-то». Итак, здесь index интерпретируется как идентификатор. Для действия индекса попробуйте просто http://localhost:3000/posts - или, если вы видите ошибку при нажатии на ссылку из другого места в своем приложении, поделитесь link_to, который вы используете.

mikej 29.12.2018 14:23

Виноват. Измените url на localhost:3000/posts/1 (или вместо 1 используйте ID последнего поста). Что ты получишь? Кроме того, вместо index.html.erb опубликуйте в своем вопросе содержание show.html.erb.

iGian 29.12.2018 14:24

"... так я поменял params[:id] на params[:title] .." Откат на @post = Post.find(params[:id])

iGian 29.12.2018 14:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
64
3

Ответы 3

Можете ли вы опубликовать сообщение об ошибке, которое вы получаете.

Просто дикая догадка, проблема могла быть в этой строке

<%= link_to post.title, post%>

Если да, измените его на

<%= link_to post.title, post_path(post) %>

Конечно, это ошибка «ActiveRecord :: RecordNotFound в PostsController # show», а затем ниже «Не удалось найти сообщение с 'id' = index» Кстати, предложенное вами изменение не помогло :(

Aleksander Jess 29.12.2018 13:54

Только начинаю, и даже сейчас я обнаружил, что в процессе разработки гем BetterErrors https://github.com/BetterErrors/better_errors дает вам отличный способ отлаживать ошибки вживую, возможно, вы можете установить этот гем и попробовать, он даст вам лучшие страницы ошибок и возможность видеть разные вары живут.

Кроме того, похоже, проблема должна быть в вашем

<%= link_to post.title, post %>

это определенно должно выглядеть примерно так

<%= link_to(post.title, post_path(post)) %> 

или

<%= link_to post.tilte, post_path(post) %>

если это не сработает, вам нужно просмотреть свои маршруты и посмотреть, определен ли у вас маршрут для страницы шоу.

Хорошо, я забыл о главном.

После добавления get 'posts/index в routes.rb все работает.

Другие вопросы по теме