几个问题:
是否可以在帮助模块(例如,应用程序帮助程序)中调用控制器方法?
如果是这样,助手如何处理视图的渲染?忽略它?
在什么情况下,您希望从助手调用控制器方法?这是不好的做法吗?
您是否有任何示例代码在帮助程序中调用控制器方法?
几个问题:
是否可以在帮助模块(例如,应用程序帮助程序)中调用控制器方法?
如果是这样,助手如何处理视图的渲染?忽略它?
在什么情况下,您希望从助手调用控制器方法?这是不好的做法吗?
您是否有任何示例代码在帮助程序中调用控制器方法?
您通常不会从助手调用控制器方法。也就是说:如果您的意思是一种收集数据然后呈现视图的方法(任何其他需要调用的方法可能都不应该在控制器中)。这绝对是不好的做法,会破坏MVC。
但是,完全可以在视图中使用控制器方法,例如current_user
方法就是一个很好的例子。
要使控制器方法在视图中可用,作为辅助方法,只需执行
private
def current_user
# do something sensible here
@current_user ||= session[:user]
end
helper_method :current_user
这种方法最好在本private
节中定义,或者它可以作为操作使用(如果您在路由中使用通配符)。
在相应的控制器上声明你的方法
private
def method_name1
...
end
def method_name2
...
end
在控制器的头部声明
helper_method :method_name1, :method_name2
您可能希望在私有状态下声明这些方法
就是这样,现在您可以在助手上使用您的方法
从助手调用控制器违反了 MVC 模式。IMO 如果您需要从 Rails 视图帮助程序(如application_helper
)调用控制器,那么设计方面有一些可以改进的地方。目的是帮助者“帮助”视图,因此只与模型对话。
我不会在这里为 MVC 本身辩护(网上有大量的参考资料),但是这个关于从视图调用控制器的 SO 线程应该可以帮助您入门。
从视图中调用控制器?(注意,这是一个 ASP.NET 线程,所以只有高级原则是相关的)。