我正在构建一个博客,并实现了一个编辑帖子功能,但收到以下错误消息:ActiveRecord :: RecordNotFound at / posts / post / edit 找不到'id'的帖子=帖子我正在使用rails 5
提前谢谢你。
**Index.html.erb**
<div class="banner-container">
<div class="container">
<div class="banner-gradient-shadow"></div>
<div class="banner-content banner-font">
<h1>
Some text
</h1>
<p>
<strong>More text</strong>.
</p>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<% @posts.each do |p| %>
<%= render "card", post: p %>
<% end %>
</div>
</div>
卡片部分
<div class="container">
<div class="row">
<div class="col-xs-12">
<div class="card" style="background-image: linear-gradient(rgba(0,0,0,0.3), rgba(0,0,0,0.2)), url('post.photo_url');">
<div class="card-category"><%= post.created_at.strftime("Posted %a %m %b %Y at %I:%M%p") %></div>
<div class="card-description">
<h2><%= post.title %></h2>
<p><%= post.summary %></p>
</div>
<!-- <img class="card-user avatar" src="user.jpg"> -->
<%= link_to "", post_path(post), class: "card-link"%>
</div>
<% if current_user %>
<%= link_to "Edit", edit_post_path(:post), :class => "btn btn- default" %>
<% end %>
</div>
</div>
edit.html.erb
<div class="container">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>Editing post</h1>
<%= simple_form_for :post do |f| %>
<%= f.input :title %>
<%= f.input :summary %>
<%= f.input :post_content, as: :text %>
<%= f.submit class: "btn btn-danger"%>
<% end %>
</div>
</div>
posts_controller.rb
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update]
skip_before_action :authenticate_user!, only: [ :edit]
def index
@posts = Post.order("created_at DESC").all
end
def show
@comment = Comment.new
end
def new
@post = Post.new
end
def edit
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to post_path(@post)
else
render :show
end
end
def update
if @post.update(post_params)
redirect_to @post
else
render :show
end
end
def destroy
end
def set_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :post_content, :summary, photo: [], video: [])
end
end
的routes.rb
Rails.application.routes.draw do
devise_for :users
mount Attachinary::Engine => "/attachinary"
root to: 'posts#index'
resources :posts, only: [:index, :show, :new, :create, :edit, :update] do
resources :comments, only: [:show, :edit, :update, :create, :destroy]
end
end
答案 0 :(得分:0)
将卡片部分
中的:post
更改为post
<%= link_to "Edit", edit_post_path(post), :class => "btn btn-default" %>
Rails发送:post
作为:id
的值,如{'id'=&gt; ':交'}
而set_params
正在尝试使用params[:id]
找到它,即':post'
@post = Post.find(:post)
答案 1 :(得分:0)
我已通过以下更改解决了此问题:
<强> index.html.erb 强> 无变化
卡片部分
<div class="container">
<div class="row">
<div class="col-xs-12">
<div class="card" style="background-image: linear-gradient(rgba(0,0,0,0.3), rgba(0,0,0,0.2)), url('post.photo_url');">
<div class="card-category"><%= post.created_at.strftime("Posted %a %m %b %Y at %I:%M%p") %></div>
<div class="card-description">
<h2><%= post.title %></h2>
<p><%= post.summary %></p>
</div>
<%= link_to "", post_path(post), class: "card-link"%>
</div>
<% if current_user %>
<%= link_to "Edit", edit_post_path(post), :class => "btn btn-default" %>
<% end %>
</div>
</div>
</div>
<强> edit.html.erb 强>
<div class="container">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>Editing post</h1>
<%= simple_form_for @post do |f| %>
<%= f.input :title, placeholder: "Enter a title" %>
<%= f.input :summary, placeholder: "Short summary of post" %>
<%= f.input :post_content, as: :text %>
<%= f.submit class: "btn btn-danger"%>
<% end %>
</div>
</div>
</div>