找到了这个最佳实践,甚至在RubyMine中进行了检查: “每个控制器和视图之间只共享一个或两个实例变量。” (Ruby on Rails Code Quality Checklist)
建议的方法是什么 - 传递两个数组及其在控制器中计算的总值,这会产生4个实例变量?或者传递给Javascript数据表:数据,总项目,显示的总项目?
答案 0 :(得分:16)
我认为最明智的方法是从许多简单的对象转到很少的复杂对象。
比方说,现在你有三个独立的变量:
现在,您可以创建一个Array
来保存所有三个,或者可能定义一个新类,而不是使用3个单独的实例变量(一个Fixnum
,两个Hash
)。它响应您可以在视图中调用的total_items
等方法。
事实上,作为一个例子,will_paginate
做了类似这样的事情:一个分页的项集合不仅仅表示为一个数组,而是一个WillPaginate::Collection
对象,它响应诸如{之类的方法。 {1}},current_page
,total_pages
等。这比拥有单独的变量更自然,因为它可以更准确地映射您有兴趣与视图共享的信息之间的关系。
根据经验,我建议任何与密切相关的信息相对应的东西应该总是在一个实例变量中,但任何完全没有相关的东西都不应该被“强制”成一个变量,因为这些最佳做法。每个规则都有一个例外,因此,例如,如果您在视图中确实有5个不同的组件彼此完全无关(很少见),盲目遵循最佳实践可能不是最好的主意。
结论:理解这些规则背后的理念,你就会知道该怎么做。