我收到了这个错误:
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"
答案 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
对应存储的记录时才调用更新程序(显示“编辑”表单)。