为什么我会收到此错误?

时间:2011-04-11 04:17:48

标签: ruby-on-rails ruby debugging ruby-on-rails-3

我收到了这个错误:

ActiveRecord::RecordNotFound (Couldn't find Video without an ID):
  app/controllers/videos_controller.rb:52:in `topic_update'

它指的是我的视频控制器中的这个动作:

def topic_update
  @video = Video.find(params[:id])

  respond_to do |format|
    if @video.update_attributes(params[:video])
      format.html { redirect_to(@video) }
      format.js
    else
      format.html { render :action => "edit" }
    end
 end
end

此表单发送PUT请求后抛出错误:

<%= form_for @video, :url => {:action => "topic_update"}, :remote => true do |f| %>
  <div class="field">
  <%= f.text_field :topic_names, :class => "topic_field" %>
  </div>
  <%= f.submit "Add Topic", :id => 'topic_submit' %>
<% end %>

这是根据我的日志发生的事情:

Started PUT "/topic/update.js" for 127.0.0.1 at Mon Apr 11 00:12:19 -0700 2011
  Processing by VideosController#topic_update as JS
  Parameters: {"video"=>{"topic_names"=>"eedefva"}}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 57 LIMIT 1

我在routes.rb文件中有这个:

resources :videos
match '/topic/update' => "videos#topic_update"

2 个答案:

答案 0 :(得分:2)

这是因为你的'topic_update'方法将被视为'GET'方法,你想要它作为post方法,

在您的routes.rb

中尝试此操作
resources :videos do
  member do
    put 'topic_update'
  end
end

我没有测试过这个,但是:D

请在此处阅读更多信息(http://guides.rubyonrails.org/routing.html)

HTH

欢呼声

sameera

答案 1 :(得分:0)

基本上,您正在尝试更新不存在的(之前未保存的)对象。 如果form_for @video引用之前保存的现有记录,则此方法id会添加@video参数。

请确保仅在@video对应存储的记录时才调用更新程序(显示“编辑”表单)。