我收到以下错误ActiveRecord :: RecordNotFound at / posts / post / edit找不到帖子'id'= post

时间:2016-09-14 09:50:25

标签: ruby-on-rails ruby activerecord

我正在构建一个博客,并实现了一个编辑帖子功能,但收到以下错误消息: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

2 个答案:

答案 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>