2

我有一个OptionsController,其中包含一个动作account。相应的视图具有三种形式,它们分别发布到三个不同的操作update_profileupdate_userchange_password。每个动作都会运行,然后应该重定向回action,再次设置并呈现视图。

我试图变得干燥并创建一个after_filter来做重定向:

after_filter( :only => [:change_password, :update_profile, :update_user] ) do |controller|
  controller.send(:redirect_to, :action => :account)
end

但是,这似乎没有被调用;相反,该行动抱怨无法找到其观点。

Template is missing
Missing template options/update_user.erb in view path app/views

有什么办法可以以 DRY 的方式做到这一点,还是我应该在三个动作中的每一个中都坚持 redirect_to 调用?

4

2 回答 2

8

只需redirect_to在每个动作中调用。DRY 和难以理解的魔法之间只有一线之隔。我觉得尝试做类似 anafter_filter或其他任何不明显地破坏动作的预期行为的事情可能太神奇了。

于 2009-06-24T15:22:06.070 回答
2

我的理解是,在将响应发送到客户端之后运行过滤器之后,这意味着在发生任何渲染或重定向之后,这就是您看到该错误的原因。它们旨在让您执行日志数据、基准测试或关闭连接或您拥有的任何其他类型的清理等操作

于 2009-06-24T16:01:01.557 回答