Rails助手应该假定实例变量存在还是应该将其作为参数接收?

| 我想知道是否有一种特定的编程原理(Demeter?)支持以下观点:Rails帮助器永远不要使用控制器实例变量,而是应该将此类变量作为函数参数来接收。例如,假设我的“ 0”动作创建了一个名为“ 1”的实例变量。此外,假设
squawk
视图包含对名为
cockadoodledoo
的助手的调用,实现如下:
def cockadoodledoo
  @egg.to_s
end
@egg
作为参数传递是更好还是不必要的冗长,以使视图调用
cockadoodledoo(@egg)
并使助手类似于:
def cockadoodledoo(egg)
  egg.to_s
end
我希望你们其中一个快乐的黑客在星期五的下午感到足够无聊,可以提出一个答案。 Cockadoodledoo! 这个问题在这里是相似的,但从未得到准确回答。     
已邀请:
        接收它们作为参数。否则,随着应用程序的增长,在重构,故障排除等方面很难跟踪实例变量的设置位置。 另外,我相信有一个通用的最佳实践,即仅在初始模板内的视图中使用实例变量。然后从那里将变量传递给助手和其他部分。     
        我说您应该始终将变量明确地传递给您的助手,这有两个原因: 您完全掌控自己的工作 首先,您可以测试您的助手     
        我不知道是否有任何命名原则来管理这种事情,但是我会通过一个论点。该参数不仅使您的助手更容易测试,而且应用程序的数据流更易于遵循,而且还使您可以为单个实例和列表使用一个助手。如果您传递参数,则两者都将:
<%= cockadoodledoo @egg %>
和:
<% @eggs.each do |egg| %>
    <%= cockadoodledoo egg %>
<% end %>
将按预期工作,而无需引入特殊的ѭ3来处理ѭ11中的列表,而不是单个ѭ1。     
        由于辅助程序消息混合到所有控制器中,因此可用于所有视图(包括局部视图和布局),因此,最好建立清晰的协定-参数。 我唯一想到的例外是,实例变量也可用于所有视图和控制器,例如菜单或类似的东西。     

要回复问题请先登录注册