2010-08-19 107 views
6

我需要从模型内部的方法调用控制器内部的动作。这是我在其他语言(使用MVC框架)时做了很多事情,但是,我从来没有在Ruby on Rails中看到过这一点。该操作不会呈现任何内容,它只是更新会话变量。Rails模型调用控制器动作

回答

5

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

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

  • 模型 - 这是数据对象 也有商业逻辑
  • 控制方法 - 这些都是采取由你的应用程序 的行动,他们控制在 模型,并告诉他们做什么,他们 控制视图来告诉它什么 发出
  • 视图 - 这个界面层, 它可以是任何格式(HTML,JS, XML),但它具有非常小的逻辑 它

如果你想打电话给在控制器的东西从一个模型,这可能意味着有太多的模型中的控制逻辑。或者,也许你刚刚得到了一个可以在任何地方使用的方法(这是一个辅助方法,实际上它与模型和控制器无关)。在这种情况下,你应该把它放在你自己的模块中/ lib目录中。

编辑:是的,会话变量应该只能在控制器中触及/更新。也许你的模型中有太多的控制类型逻辑?也许应该重新思考这个逻辑与实际模型有多密切,如果它实际上是控制器行为的一部分。

+0

的问题是,我有一个验证的插件,我需要在用户通过插件里面一个记得我的功能登录(调用一个方法,BYP评估所有的登录控制器操作 - 如果不是这种情况,我显然会在这里更改会话数据)。在控制器中调用方法的需求与分析跟踪相关,而不是用户看到的任何内容。 – scott 2010-08-19 14:38:25

0

如果你想调用控制器动作(或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