Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 重构和解耦Rails控制器:它们可以互相调用吗?_Ruby On Rails_Refactoring_Decoupling - Fatal编程技术网

Ruby on rails 重构和解耦Rails控制器:它们可以互相调用吗?

Ruby on rails 重构和解耦Rails控制器:它们可以互相调用吗?,ruby-on-rails,refactoring,decoupling,Ruby On Rails,Refactoring,Decoupling,我在Ruby on Rails应用程序中遇到以下情况: 用户填写表单(注释),可以看到一个omniauth页面,在那里她可以选择身份验证方法(openId、Twitter、Facebook等) 当用户返回成功时,填写omniauth,获取会话并处理初始表单数据(发布注释) 我都在工作,只是我的逻辑在我看来是一种丑陋的方式。sessioncontroller现在创建关于成功身份验证的注释 什么是一个很好的方式来解耦像这样的事情?注释模块是否应该连接(侦听)SessionController?或

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

  • 用户填写表单(注释),可以看到一个omniauth页面,在那里她可以选择身份验证方法(openId、Twitter、Facebook等)
  • 当用户返回成功时,填写omniauth,获取会话并处理初始表单数据(发布注释)
我都在工作,只是我的逻辑在我看来是一种丑陋的方式。
sessioncontroller
现在创建关于成功身份验证的注释


什么是一个很好的方式来解耦像这样的事情?
注释
模块是否应该连接(侦听)SessionController?或者SessionController是否应该简单地调用
CommentsController
Comment
类上的一些方法来保存成功身份验证的注释?有什么我可以熟悉的模式可以解决这些问题吗?

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

  • 未经验证的用户发布到/评论/创建
  • before过滤器检查身份验证,并将注释参数散列和成功重定向位置存储在会话中,然后重定向到/session/new
  • 成功验证后,会话控制器将检查params散列,并在重定向到存储路径之前创建任何延迟模型
  • 如果您可以从另一个请求发布,那将是非常好的,但不幸的是您不能,因此您需要将逻辑放入会话控制器中