0

我的应用程序布局视图中有一些代码需要对象存在才能工作。该对象存在于某些控制器上,但不是全部。

起初我以为我可以在 application_controller 上使用 after_filter 来确保对象存在。但这不起作用,因为 after_filter 仅在视图渲染后应用,而且它显然也是一种反模式

什么是确保对象始终存在的最佳方法,而不是在已经创建对象的控制器上不必要地创建对象。

4

2 回答 2

1

假设您的变量是@foo。

application_helper.rb

def foo
  @foo ||= generate_foo()
end

然后从任何角度来看,您只需通过 foo 而不是 @foo 调用您的对象。

于 2012-08-22T09:07:40.493 回答
0

这可能也有它自己的缺陷,但就个人而言,我将在我的方法中创建一个方法application_controller来返回实例。要使其在视图中可用,只需将方法传递给helper_method. helper_method用于在视图、助手和控制器之间共享方法。

我主要通过身份验证来做到这一点。所以你我会有类似的东西;

def current_user
  @current_user ||= User.find_by_id(session[:user_id])
end

helper_method :current_user # make current_user available in the views
于 2012-08-22T09:07:11.347 回答