繁体   English   中英

Rails模型调用Controller动作

[英]Rails Model to call Controller action

我需要从模型内部的方法调用控制器内部的动作。 这是我用其他语言做的很多事情(当使用MVC框架时),但是,我从未在ruby on rails上看到过这种情况。 该操作不会呈现任何内容,只是更新会话变量。

这通常不是你在MVC模式中通常会做的事情。 您的模型应该只包含业务逻辑(和数据访问)。 你能提供一些关于你打算打电话的信息吗?为什么? 通常当你试图做这样的事情时,这是一种气味,某种东西不是它应该的地方。

这通常是我看到它的方式:

  • 模型 - 这些是具有业务逻辑方法的数据对象
  • 控制器 - 这些是您的应用程序采取的操作,他们控制模型并告诉他们该做什么,他们控制视图告诉它发出什么
  • 查看 - 这是界面层,它可以是任何格式(html,js,xml)但它的逻辑很少

如果您尝试从模型中调用控制器中的某些内容,则可能意味着模型中的控制逻辑过多。

或者,也许,你只有一个可以在任何地方使用的方法(它是一个帮助方法,它实际上与模型和控制器无关)。 在这种情况下,您应该将它放在/ lib目录中的自己的模块中。

编辑:是的,会话变量应该只能在Controller中触摸/更新。 也许你的模型中有太多的控制类型逻辑? 如果它实际上是Controller的行动的一部分,也许重新考虑该逻辑与实际模型的关系有多紧密。

如果你想要调用控制器动作(或者cahange会话因为session被定义为@session变量并且它是私有的)你应该将控制器实例作为参数传递给模型的方法,所以如果你需要编辑session方法可能类似于

def change_session(controller)
  @ses = controller.send :session
  //some actions
end

在控制器中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM