8

几个问题:

  1. 是否可以在帮助模块(例如,应用程序帮助程序)中调用控制器方法?

  2. 如果是这样,助手如何处理视图的渲染?忽略它?

  3. 在什么情况下,您希望从助手调用控制器方法?这是不好的做法吗?

  4. 您是否有任何示例代码在帮助程序中调用控制器方法?

4

3 回答 3

13

您通常不会从助手调用控制器方法。也就是说:如果您的意思是一种收集数据然后呈现视图的方法(任何其他需要调用的方法可能都不应该在控制器中)。这绝对是不好的做法,会破坏MVC

但是,完全可以在视图中使用控制器方法,例如current_user方法就是一个很好的例子。

要使控制器方法在视图中可用,作为辅助方法,只需执行

private

def current_user
  # do something sensible here
  @current_user ||= session[:user] 
end
helper_method :current_user

这种方法最好在本private节中定义,或者它可以作为操作使用(如果您在路由中使用通配符)。

于 2010-05-26T07:47:19.393 回答
10

在相应的控制器上声明你的方法

private
def method_name1
...
end

def method_name2
...
end

在控制器的头部声明

helper_method :method_name1, :method_name2

您可能希望在私有状态下声明这些方法

就是这样,现在您可以在助手上使用您的方法

于 2012-11-06T09:06:15.637 回答
0

从助手调用控制器违反了 MVC 模式。IMO 如果您需要从 Rails 视图帮助程序(如application_helper)调用控制器,那么设计方面有一些可以改进的地方。目的是帮助者“帮助”视图,因此只与模型对话。

我不会在这里为 MVC 本身辩护(网上有大量的参考资料),但是这个关于从视图调用控制器的 SO 线程应该可以帮助您入门。

从视图中调用控制器?(注意,这是一个 ASP.NET 线程,所以只有高级原则是相关的)。

于 2010-05-26T01:28:13.723 回答