微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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。     ,        由于辅助程序消息混合到所有控制器中,因此可用于所有视图(包括局部视图和布局),因此,最好建立清晰的协定-参数。 我唯一想到的例外是,实例变量也可用于所有视图和控制器,例如菜单或类似的东西。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。