ActiveRecord :: RecordNotFound(无法找到带有'id'=的故事):

时间:2016-11-30 14:05:50

标签: ruby-on-rails ruby

我一直在关注这个问题的其他人的帖子。不幸的是,不久之后我就被困在了它上面。我知道有几个控制器方法找不到具有相关“ID”的故事并将其呈现给视图,因此我的错误。

但是,我不明白我如何编辑我的控制器方法/路由,所以它实际上可以找到'1,2,3,4等'的id。我相信它正试图寻找与ID不同的东西。 'create'和'show'方法正在创建相同的错误。

屏幕上出错:

ActiveRecord::RecordNotFound in StoriesController#create 

Couldn't find Story with 'id'=

def find_story
    @story = Story.find(params[:id])
end

在这里,我已将ID作为故事查找方法的参数,但它没有找到它。为什么呢?

class StoriesController < ApplicationController
    before_action :find_story, only: [:destroy, :create, :show, :edit, :update]


def index
    @stories = Story.order('created_at DESC')
end

def new
    @story = Story.new
end

def create
    @story = Story.new(story_params)
    if @story.save
        flash[:success] = "Your beautiful story has been added!"
        redirect_to root_path
    else
        render 'new'
    end
end

def edit
end

def update
    if @story.update.attributes(story_params)
        flash[:success] = "More knowledge, more wisdom"
        redirect_to root_path
    else
        render 'edit'
    end
end

def destroy
    if @story.destroy
        flash[:success] = "I think you should have more confidence in your storytelling"
    else
        flash[:error] = "Can't delete this story, sorry"
    end
end

def show
    @stories = Story.all
end

private

def story_params
    params.require(:story).permit(:name, :description)
end

def find_story
    @story = Story.find(params[:id])
end


end

我的routes.rb:

Rails.application.routes.draw do

get 'stories/new/:id' => 'posts#show'
resources :stories
devise_for :users
root to: 'stories#index'
end

2 个答案:

答案 0 :(得分:2)

您想要更改&#34;:find_story&#34;不包括创建,因为它告诉它寻找一个id,但是在创建页面上没有id,你创建一个新的,没有找到存在的

所以将before_action更改为此

$('#menuBg').val('2AFF17');

您的故事问题是您尝试使用的路线。显示查找id,出于我上面提到的相同原因,所以路由需要类似

before_action :find_story, only: [:destroy, :show, :edit, :update]

其中&#34; 1&#34;是你想要的故事的身份。

答案 1 :(得分:0)

  

StoriesController中的ActiveRecord :: RecordNotFound #create

您有使用创建方法的before_action :find_story,该方法尝试查找Story,但参数中没有:id

因此,您需要从:create列表中删除before_action操作并将其更改为

before_action :find_story, only: [:destroy, :show, :edit, :update]