如何在保持DRY的同时将多个操作重定向到单个操作?

时间:2009-06-24 15:13:15

标签: ruby-on-rails dry

我有一个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

我有什么方法可以干这样做,或者我应该在三个动作的每个动作中坚持使用redirect_to?

2 个答案:

答案 0 :(得分:8)

只需将redirect_to调用放入每个操作中。 DRY和难以理解的魔法之间有一条细线。我想尝试做一些像after_filter或其他任何不明显破坏行为的预期行为的东西可能太神奇了。

答案 1 :(得分:2)

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