我正在尝试为文章对象创建自定义POST操作。
在我的routes.rb
中,我已按以下方式设置操作:
resources :articles do
member do
post 'update_assigned_video'
end
end
在articles_controller.rb
我有:
def update_assigned_video
@article = Articles.find(params[:id])
@video = Video.find(:id => params[:chosenVideo])
respond_to do |format|
if !@video.nil?
@article.video = @video
format.html { redirect_to(@article, :notice => t('article.updated')) }
else
format.html { render :action => "assign_video" }
end
end
然后在我看来,我做了一个这样的表格:
<%= form_for @article, :url => update_assigned_video_article_path(@article) do |f|%>
[...]
<%= f.submit t('general.save') %>
视图呈现(所以我认为他知道路线)。但是单击“提交”按钮会显示以下错误消息:
No route matches "/articles/28/update_assigned_video"
rake routes
也知道:
update_assigned_video_article POST /articles/:id/update_assigned_video(.:format) {:action=>"update_assigned_video", :controller=>"articles"}
我做错了什么? 这是错误的做法吗?
答案 0 :(得分:4)
您的form_for
会执行PUT
请求而不是POST
请求,因为它会对现有对象执行操作。我建议您更改路线文件中的行:
post 'update_assigned_video'
对此:
put 'update_assigned_video'