Хорошо, я пытаюсь отобразить 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] и все равно получил ту же ошибку.
Не могли бы вы объяснить, что не так и что нужно исправить?
Можете ли вы опубликовать URL-адрес, который у вас есть в адресной строке?
@ray, значит, это ActiveRecord::RecordNotFound in PostsController#show, а затем Couldn't find Post with 'id'=index.
@iGian локальный: 3000 / сообщений / индекс
@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 мс) `
по какой-то причине я не могу отформатировать текст
URL-адреса @AleksanderJess в стиле /posts/something предназначены для отображения одного сообщения с идентификатором «что-то». Итак, здесь index интерпретируется как идентификатор. Для действия индекса попробуйте просто http://localhost:3000/posts - или, если вы видите ошибку при нажатии на ссылку из другого места в своем приложении, поделитесь link_to, который вы используете.
Виноват. Измените url на localhost:3000/posts/1 (или вместо 1 используйте ID последнего поста). Что ты получишь? Кроме того, вместо index.html.erb опубликуйте в своем вопросе содержание show.html.erb.
"... так я поменял params[:id] на params[:title] .." Откат на @post = Post.find(params[:id])





Можете ли вы опубликовать сообщение об ошибке, которое вы получаете.
Просто дикая догадка, проблема могла быть в этой строке
<%= link_to post.title, post%>
Если да, измените его на
<%= link_to post.title, post_path(post) %>
Конечно, это ошибка «ActiveRecord :: RecordNotFound в PostsController # show», а затем ниже «Не удалось найти сообщение с 'id' = index» Кстати, предложенное вами изменение не помогло :(
Только начинаю, и даже сейчас я обнаружил, что в процессе разработки гем 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 все работает.
Пожалуйста, проверьте журнал ошибок. Это как
ActiveRecord::RecordNotFound: Couldn't find Post without an IDилиActiveRecord::RecordNotFound: Couldn't find User with 'id'=?