当前位置:  开发笔记 > 后端 > 正文

建议用于存储布局的实例变量的位置

如何解决《建议用于存储布局的实例变量的位置》经验,为你挑选了1个好方法。

如果您有一个菜单中的布局,该菜单从数据库中获取其菜单项.Rails应用程序中建议放置该调用并将其分配给布局使用的实例变量的位置在哪里?

1. @menuitems # exists in application.html.erb
2. @menuitems = MenuItem.find(:all) # code exists somewhere (where should this exist?)

@womble - 是的,before_filter会有所帮助,但我必须将它包含在使用此布局的所有控制器中,或者这是我可以放在application_controller.rb中的内容,子控制器和附带的视图是否能够看到该实例变量?



1> wuputah..:

是的,您可以before_filter在应用程序控制器中定义和设置它.所有控制器都会在过滤之前调用它.以这种方式设置全局实例变量并不罕见.

另一种方法是在应用程序控制器中使用memoization方法,并将set作为辅助方法,与流行current_user方法类似.然后,实例变量将由memoization函数很好地包装.例如:

def menu_items
  @menu_items ||= MenuItem.all
end
helper_method :menu_items

现在只需menu_items从您的布局调用而不是@menu_items直接使用.


我认为值得一提的是将它放在应用程序控制器中是不必要的.如果您只想在视图/布局中使用它,可以将它直接放在辅助模块中,例如LayoutHelper.您需要在应用程序控制器中使用helper :all(或至少helper :layout).

这有点个人偏好 - 您可能喜欢也可能不喜欢在助手中进行ActiveRecord呼叫.但是,如果有时间这样做,那就是它.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有