我正在构建具有Keynote模型和Story模型(以及用Devise实现的User模型)的应用程序。 主题演讲有许多故事和故事属于主题演讲。ActiveRecord :: RecordNotFound - 无法找到没有ID的Keynote
我在创造新的故事的问题,我得到以下错误:
ActiveRecord::RecordNotFound in StoriesController#create
Couldn't find Keynote without an ID
上stories_controller.rb的第17行是
@keynote = Keynote.find(params[:keynote_id])
在创建方法
发生的错误。
这是我stories_controller.rb
class StoriesController < ApplicationController
before_filter :authenticate_user!, :except => [:show, :index]
def index
@keynote = Keynote.find(params[:keynote_id])
@stories = @keynote.stories
end
def new
@keynote = Keynote.find(params[:keynote_id])
@story = @keynote.stories.build
end
def create
if user_signed_in?
@keynote = Keynote.find(params[:keynote_id])
@story = @keynote.current_user.stories.build(params[:story])
if @story.save
flash[:notice] = 'Question submission succeeded'
redirect_to keynote_stories_path
else
render :action => 'new'
end
end
end
的一部分,这是我的keynotes_controller.rb
任何帮助将非常感激。
编辑: 这些是我尝试创建新故事时的参数。
{"utf8"=>"✓", "authenticity_token"=>"76odSpcfpTlnePxr+WBt36fVdiLD2z+Gnkxt/Eu1/TU=", "story"=>{"name"=>"as"}, "commit"=>"Send"}
它看起来没有通过Keynote的ID。
这是StoriesController#新的观点
<%= error_messages_for 'story' %>
<%= form_for @story do |f| %>
<p>
Question:<br />
<%= f.text_field :name %>
</p>
<p>
<%= submit_tag "Ask" %>
</p>
<% end %>
这是我在我的routes.rb文件:
get "keynotes/index"
get "users/show"
devise_for :users
get "votes/create"
get "stories/index"
resources :keynotes do
resources :stories
end
resources :stories do
get 'bin', :on => :collection
resources :votes
end
resources :users
root :to => 'keynotes#index'
'params [:keynote_id]'可能是'nil'或在数据库中不存在。试着放一个'puts params [:keynote_id]'来看看你是否正确地得到了这个参数。检查ID是否存在于数据库表中。另外,你还没有在'StoriesController#new'中得到错误吗? – Zabba
@Zabba的权利,它看起来像零,但我不知道如何填充它...(见上面的帖子的编辑)。另外,我应该在哪里放置'puts params [:keynote_id]'? –
在'StoriesController#view'的视图中显示'form_for'或'form_tag'。 – Zabba