【发布时间】:2011-08-13 23:20:12
【问题描述】:
找到了这个最佳实践,它甚至在 RubyMine 中得到了检查: “每个控制器和视图之间只共享一个或两个实例变量。)” (Ruby on Rails Code Quality Checklist)
例如,建议的方法是什么 - 传递两个数组及其在控制器中计算的总值,这会产生 4 个实例变量?或者将数据、总项目、显示的总项目传递给 Javascript 数据表?
【问题讨论】:
标签: ruby-on-rails
找到了这个最佳实践,它甚至在 RubyMine 中得到了检查: “每个控制器和视图之间只共享一个或两个实例变量。)” (Ruby on Rails Code Quality Checklist)
例如,建议的方法是什么 - 传递两个数组及其在控制器中计算的总值,这会产生 4 个实例变量?或者将数据、总项目、显示的总项目传递给 Javascript 数据表?
【问题讨论】:
标签: ruby-on-rails
我认为尊重这一点的最明智的方法是从许多简单的对象变为少数复杂的对象。
例如,假设您现在有三个单独的变量:
现在,您可以创建一个包含所有三个实例变量的Hash,而不是使用 3 个单独的实例变量(一个 Array,两个 Fixnum),或者定义一个新类来响应方法,例如total_items 可以在视图中调用。
事实上,作为一个例子,will_paginate 做了这样的事情:一个分页的项目集合不简单地表示为一个数组,而是一个WillPaginate::Collection 对象,它响应诸如current_page、@ 987654328@、total_entries 等。这比单独的变量更自然,因为它更准确地映射了您有兴趣与视图共享的信息之间的关系。
根据经验,我建议任何与密切相关的信息对应的东西都应该放在一个实例变量中,但是任何根本不相关的东西都不应该因为这些而被“强制”到一个变量中最佳实践。每条规则都有一个例外,因此,例如,如果您认为确实有 5 个不同的组件彼此完全没有关系(这种情况很少见),那么盲目地遵循最佳实践可能不是最好的主意。
底线:了解这些规则背后的想法,你就会知道该怎么做。
【讨论】: