重构和解耦Rails控制器:他们可以互相呼叫吗?

时间:2011-03-08 14:24:28

标签: ruby-on-rails refactoring decoupling

我在Ruby on Rails应用程序中遇到以下情况:

  • 用户填写表格(评论),看到一个omniauth页面,她可以选择身份验证方法(openId,Twitter,Facebook等)。
  • omniauth填写,成功用户返回,获取会话并处理初始表单数据(发布评论)。

我一切顺利,除了我的逻辑传播,我认为,一种丑陋的方式; SessionsController现在创建有关成功身份验证的注释。

什么是解耦这类事情的好方法? Comment模块是否应该挂接(监听)SessionsController?或者SessionsController是否应该只调用CommentsControllerComment类上的某些方法来保存对成功身份验证的注释?是否有任何我可以熟悉的模式来解决这些问题?

1 个答案:

答案 0 :(得分:0)

如果控制器之间的共享功能使用继承或模块,我认为从另一个控制器调用一个控制器不一定是好的做法。针对您的具体问题,我会这样做:

  1. 未经身份验证的用户POSTS到/ comments / create
  2. A过滤器检查身份验证并将注释参数哈希和成功重定向位置存储在会话中,然后重定向到/ session / new
  3. 成功验证会话控制器后,检查params散列并在重定向到存储路径之前创建任何延迟模型。
  4. 如果你可以从另一个请求发出POST,那会很棒,但不幸的是你不能,所以你需要将逻辑放在会话控制器中。