在辅助模块中调用控制器方法的指南?

时间:2010-05-26 01:08:49

标签: ruby-on-rails controller helper

几个问题:

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

  2. 如果是这样,帮助程序如何处理视图的呈现?忽略它?

  3. 在什么情况下你想从帮助者调用控制器方法?这是不好的做法吗?

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

3 个答案:

答案 0 :(得分:13)

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

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

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

private

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

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

答案 1 :(得分:9)

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

private
def method_name1
...
end

def method_name2
...
end

在控制器的头部声明

helper_method :method_name1, :method_name2

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

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

答案 2 :(得分:0)

从帮助程序调用控制器违反了MVC模式。 IMO如果你需要从Rails视图助手(如application_helper)调用控制器,那么可以改进设计。目的是帮助者“帮助”观点,因此只与模型交谈。

我不打算在这里捍卫MVC(网上有大量的引用),但是这个关于从视图中调用控制器的SO线程应该让你开始。

Calling controller from view?(请注意,这是一个ASP.NET线程,因此只有高级原则才相关)。