Rails模型调用控制器操作

7

我需要从模型中的一个方法调用控制器中的一个动作。在其他语言(使用MVC框架)中,我经常这样做,但是在Ruby on Rails中我从未见过这样的操作。该动作不会渲染任何内容,只会更新会话变量。

2个回答

5
这不是MVC模式中的常规操作。你的Model应该只包含业务逻辑(和数据访问)。你能提供一些关于你要调用什么以及为什么要这样做的信息吗?通常,当你尝试做这样的事情时,它会暗示某些东西不在它应该在的地方。
通常我这样看:
- Model - 这些是数据对象,也有业务逻辑方法。 - Controller - 这些是应用程序执行的操作,它们控制模型并告诉它们该做什么,它们控制视图以告诉它该发出什么。 - View - 这是接口层,它可以是任何格式(html、js、xml),但它很少有逻辑。
如果你试图从模型中调用控制器中的内容,这可能意味着你的模型中有太多的控制逻辑。
或者,也许你只有一个可以在任何地方使用的方法(它是一个辅助方法,与模型和控制器无关)。在这种情况下,你应该将它放在/lib目录下的自己的模块中。
编辑:是的,会话变量可能只应在Controller中进行更改/更新。也许你的模型中有太多的控制类型逻辑?如果它实际上是控制器操作的一部分,那么可能需要重新考虑它与实际模型的关系。

问题在于我有一个用于身份验证的插件,当用户通过插件内的记住我功能登录时,我需要调用一个方法(该功能绕过所有登录控制器操作 - 如果不是这种情况,我显然会在此更改会话数据)。在控制器中调用方法的需求与分析跟踪相关,而不是用户看到的任何内容。 - scott

0
如果您想从模型中调用控制器操作(或更改会话,因为session被定义为@session变量且为私有),则应将控制器实例作为参数传递给模型的方法。因此,如果您确实需要编辑session方法,则可能类似于以下内容:
def change_session(controller)
  @ses = controller.send :session
  //some actions
end

在控制器中

def something
  s = Session.new
  s.change_session(self)
  ...
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接