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