2011-09-19 47 views
1

创建自定义POST操作我想创造我的文章对象的自定义POST操作。如何Rails3中

在我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 [email protected]? 
    @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

它是错字'routes.rb'? ':aricles'? – Alex

+0

你的'rake routes'是否显示指定的路线? –

+0

@alex:错字只是在这里(我现在纠正)| @查克:是的,它是在耙路线(我加的是输出的问题) –

回答

4

您的form_for将执行PUT请求,而不是POST请求,因为它正在对现有对象起作用。我会建议改变路线在你的路由从这个文件:

post 'update_assigned_video' 

要这样:

put 'update_assigned_video' 
+0

是的,工作。谢谢! –