我一直在关注这个问题的其他人的帖子。不幸的是,不久之后我就被困在了它上面。我知道有几个控制器方法找不到具有相关“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
答案 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]