导致此redirect_to失败的原因是什么?

时间:2010-08-27 14:31:45

标签: ruby-on-rails routing redirecttoaction

我正在尝试使用此redirect_to

redirect_to :controller => :note_categories, :action => :destroy, :note_id => params[:id]

这是结果的网址

http://localhost:3000/note_categories/272?note_id=272

这是错误消息

Unknown action
No action responded to show. Actions: destroy

我重定向到note_categories destroy动作并传入note id的原因是,在destroy动作中,我发现所有与note相关的note_categories,在它们上运行一些代码,然后销毁它们。我知道这不是一个好方法,但我无法使用:dependent => :destroy因为我必须在我删除之前在note_category上运行的代码需要访问current_user,这在note_category模型中不会发生。

所以是的,有人可以告诉我在redirect_to中我做错了什么吗?谢谢你的阅读。

1 个答案:

答案 0 :(得分:4)

redirect_to方法本质上是Post/Redirect/Get(PRG)网页设计模式的Rails实现。它用于防止用户在提交表单后单击浏览器的“刷新”按钮而导致重复的表单提交。

典型的Rails用法就像创建对象一样:

  • 显示用于创建对象的表单(new action / HTTP GET)
  • 用户填写表格
  • 表单已提交(create操作/ HTTP POST)
  • 创建并保存对象
  • 使用HTTP 301/302状态对对象的redirect_to视图或show
  • 执行index

- 用于编辑对象:

  • 显示用于编辑现有对象的表单(edit action / HTTP GET)
  • 用户填写表格
  • 表单已提交(update action / HTTP PUT)
  • 对象已更新并保存
  • 使用HTTP 301/302状态对对象的redirect_to视图或show
  • 执行index

您无法直接重定向到destroy操作,因为在RESTful Rails中,由于HTTP DELETE请求而打算调用它,并且在调用模板时不会呈现模板。 redirect_to方法始终重定向到模板。

您没有向我们展示销毁笔记的代码,但我怀疑您尝试实现的内容可以使用前置过滤器并让控制器将当前用户传递给模型方法。