我需要从模型内部的方法调用控制器内部的动作。这是我用其他语言做的很多事情(当使用MVC框架时),但是,我从未在ruby on rails上看到过这种情况。该操作不会呈现任何内容,只是更新会话变量。
答案 0 :(得分:5)
这不是你通常在MVC模式中做的事情。您的模型应该只包含业务逻辑(和数据访问)。你能提供一些关于你打算打电话的信息吗?为什么?通常当你试图做这样的事情时,这是一种气味,某种东西不是应该的地方。
这通常是我看到它的方式:
如果您尝试从模型中调用控制器中的某些内容,则可能意味着模型中的控制逻辑过多。
或者,也许,你刚刚得到了一个可以在任何地方使用的方法(它是一个辅助方法,它实际上与模型和控制器无关)。在这种情况下,您应该将它放在/ lib目录中的自己的模块中。
编辑:是的,会话变量应该只在Controller中触及/更新。也许你的模型中有太多的控制类型逻辑?如果它实际上是Controller的行动的一部分,也许重新考虑该逻辑与实际模型的关系有多紧密。
答案 1 :(得分:0)
如果你想要调用控制器动作(或者因为session
被定义为@session
变量并且它是私有的来自cahange会话)你应该将控制器实例作为参数传递给模型的方法,所以如果你需要编辑session
方法可能类似于
def change_session(controller)
@ses = controller.send :session
//some actions
end
控制器中的
def something
s = Session.new
s.change_session(self)
...
end