为什么我的 delete post 功能不起作用?
Why my delete post function doesn't work?
我试图使用 Rails 制作一个简单的博客应用程序。我添加了一个功能,如 "creating a new post","edit a post" 我还想添加一个删除功能。但它不起作用。请帮助我!
这是我的 "posts_controller.rb" 文件
class PostsController < ApplicationController
def index
@posts = Post.all.order('created_at DESC')
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
@post.save
if @post.save
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update(params[:post].permit(:title, :body))
redirect_to @post
else
render 'edit'
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to post_path
end
private
def post_params
params.require(:post).permit(:title, :body)
end
end
"show_html.erb" 文件:
<div id="post_content">
<h1 class="title">
<%= @post.title %>
</h1>
<p class="date">
Submitted <%= time_ago_in_words(@post.created_at) %> Ago
| <%= link_to 'Edit', edit_post_path(@post) %>
| <%= link_to 'Delete', post_path(@post), method: :delete,
data: { confirm: 'Are you sure?' } %>
</p>
<p class="body">
<%= @post.body %>
</p>
</div>
它给了我这个错误:
ActiveRecord::RecordNotFound 在 PostsController#show
找不到 Post 'id'=7
提取的源代码(大约第 22 行):
def show
@post = Post.find(params[:id])
end
在您的 destroy
方法中,您将重定向到刚刚删除的 post
的 show
路由。这就是您收到 RecordNotFound
错误的原因。
在您的 destroy
方法中将 redirect_to post_path
更改为 redirect_to posts_path
,看看是否可以清除此错误。
我试图使用 Rails 制作一个简单的博客应用程序。我添加了一个功能,如 "creating a new post","edit a post" 我还想添加一个删除功能。但它不起作用。请帮助我!
这是我的 "posts_controller.rb" 文件
class PostsController < ApplicationController
def index
@posts = Post.all.order('created_at DESC')
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
@post.save
if @post.save
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update(params[:post].permit(:title, :body))
redirect_to @post
else
render 'edit'
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to post_path
end
private
def post_params
params.require(:post).permit(:title, :body)
end
end
"show_html.erb" 文件:
<div id="post_content">
<h1 class="title">
<%= @post.title %>
</h1>
<p class="date">
Submitted <%= time_ago_in_words(@post.created_at) %> Ago
| <%= link_to 'Edit', edit_post_path(@post) %>
| <%= link_to 'Delete', post_path(@post), method: :delete,
data: { confirm: 'Are you sure?' } %>
</p>
<p class="body">
<%= @post.body %>
</p>
</div>
它给了我这个错误: ActiveRecord::RecordNotFound 在 PostsController#show 找不到 Post 'id'=7 提取的源代码(大约第 22 行):
def show
@post = Post.find(params[:id])
end
在您的 destroy
方法中,您将重定向到刚刚删除的 post
的 show
路由。这就是您收到 RecordNotFound
错误的原因。
在您的 destroy
方法中将 redirect_to post_path
更改为 redirect_to posts_path
,看看是否可以清除此错误。