我正在构建一个具有Keynote模型和Story模型的应用程序(以及我用Devise实现的用户模型)。 主题演讲有许多故事和一个故事属于主题演讲。
我在创建新故事时遇到问题,我收到以下错误:
StoriesController中的ActiveRecord :: RecordNotFound #create
找不到没有ID的Keynote
错误发生在stories_controller.rb的第17行,即
@keynote = Keynote.find(params[:keynote_id])
在create方法中。
这是我的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
class KeynotesController < ApplicationController
def index
@keynotes = Keynote.find :all, :order => 'id ASC'
end
def new
@keynote = Keynote.new
end
def show
@keynote = Keynote.find(params[:id])
end
def create
@keynote = Keynote.new(params[:keynote])
if @keynote.save
flash[:notice] = 'Keynote submission succeeded'
redirect_to keynotes_path
else
render :action => 'new'
end
end
end
任何帮助都会非常感激。
编辑: 当我尝试创建一个新故事时,这些是参数。
{ “UTF8”=&gt; “中✓”, “authenticity_token”=&gt; “中76odSpcfpTlnePxr + WBt36fVdiLD2z + Gnkxt / EU1 / TU =”, “故事”=&GT; { “名称”=&gt; “中作为”}, “提交”=&gt; “中发送”}
看起来没有传递Keynote的ID。
这是StoriesController#new
的视图<%= 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'
答案 0 :(得分:1)
我认为这应该可以解决问题:
<%= form_for @story do |f| %>
<%= hidden_field_tag 'keynote_id', @keynote.id %>
.
rest of the form stuff here
.
<% end %>
PS。不确定您是否会在keynote_id
或params[:keynote_id]
中获得params[:story][:keynote_id]
..请查看两者。
注意:我认为使用fields_for
或类似的东西也会有更简单的方法,但我目前无法访问Rails设置来测试它。