我有一个OptionsController
,其中包含一个动作account
。相应的视图有三种形式,分别发布到三个不同的操作update_profile
,update_user
和change_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
我有什么方法可以干这样做,或者我应该在三个动作的每个动作中坚持使用redirect_to?
答案 0 :(得分:8)
只需将redirect_to
调用放入每个操作中。 DRY和难以理解的魔法之间有一条细线。我想尝试做一些像after_filter
或其他任何不明显破坏行为的预期行为的东西可能太神奇了。
答案 1 :(得分:2)
我的理解是,在之后运行过滤器后,响应被发送到客户端,这意味着在发生任何渲染或重定向之后,这就是您看到错误的原因。它们旨在让您执行日志数据,基准测试或关闭连接或任何其他类型的清理等操作