如何在Rails3中创建自定义POST操作

时间:2011-09-19 14:15:33

标签: ruby-on-rails-3

我正在尝试为文章对象创建自定义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"}

我做错了什么? 这是错误的做法吗?

1 个答案:

答案 0 :(得分:4)

您的form_for会执行PUT请求而不是POST请求,因为它会对现有对象执行操作。我建议您更改路线文件中的行:

post 'update_assigned_video'

对此:

put 'update_assigned_video'