0

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

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

我都在工作,除了我的逻辑散布在我认为的丑陋方式中;SessionsController现在创建关于成功认证的评论。

什么是解耦这样的事情的好方法?模块是否应该Comment挂钩(监听)SessionsController?或者 SessionsController 是否应该简单地调用CommentsControllerorComment类上的一些方法来保存对成功身份验证的评论?是否有任何我可以让自己熟悉的模式来解决这些问题?

4

1 回答 1

0

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

  1. 未经身份验证的用户发布到 /comments/create
  2. 前过滤器检查身份验证并将评论参数哈希和成功重定向位置存储在会话中,然后重定向到 /session/new
  3. 成功验证会话控制器后,会检查参数哈希并在重定向到存储路径之前创建任何延迟模型。

如果您可以从另一个请求中发布,那就太好了,但不幸的是您不能,因此您需要将逻辑放在会话控制器中。

于 2011-03-08T14:48:37.920 回答