首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord::RecordNotFound -没有ID就找不到基调

ActiveRecord::RecordNotFound -没有ID就找不到基调
EN

Stack Overflow用户
提问于 2011-11-05 13:58:56
回答 1查看 1.3K关注 0票数 1

我正在构建一个具有基调模型和故事模型的应用程序(以及我用Devise实现的用户模型)。键注有很多故事,故事属于基调。

我在创建新故事时遇到了问题,我得到了以下错误:

ActiveRecord::RecordNotFound in StoriesController#create

没有ID就找不到基调

错误发生在stories_controller.rb的第17行,即

代码语言:javascript
复制
@keynote = Keynote.find(params[:keynote_id])

在create方法中。

这是我stories_controller.rb的一部分

代码语言:javascript
复制
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

代码语言:javascript
复制
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"=>"✓",“=>”故事“=>{”名称“=>”为“},提交”=>“发送”}

看起来主题的ID没有被传递。

这是StoriesController#new的视图

代码语言:javascript
复制
<%= 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文件中的内容:

代码语言:javascript
复制
  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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-05 16:30:15

我认为这应该能起作用:

代码语言:javascript
复制
<%= 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设置来测试它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8020611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档