【问题标题】:What is causing this redirect_to to fail?是什么导致此 redirect_to 失败?
【发布时间】:2011-04-04 20:26:05
【问题描述】:

我正在尝试使用此 redirect_to

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

这是产生的 URL

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

这是错误信息

Unknown action
No action responded to show. Actions: destroy

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

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

【问题讨论】:

    标签: ruby-on-rails routing redirecttoaction


    【解决方案1】:

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

    典型的 Rails 用法是这样创建对象的:

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

    ——用于编辑对象:

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

    您不能直接重定向到 destroy 操作,因为在 RESTful Rails 中,该操作旨在作为 HTTP DELETE 请求的结果而被调用,并且在调用时不会呈现模板。 redirect_to 方法总是重定向到一个模板。

    您还没有向我们展示销毁笔记的代码,但我怀疑您尝试实现的目标可以通过前置过滤器和让控制器将当前用户传递给模型方法来完成。

    【讨论】:

    • 感谢您的回答。这为我清除了关于 redirect_to 的事情。只是想知道,你能解释一下你的最后一段吗?你的意思是我应该从 Note 控制器的销毁操作中调用 NoteCategory 模型中的一个方法,并将它传递给 current_user?
    • @ben 可能,您必须发布您的控制器和模型代码。也许作为一个单独的问题......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多