gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中组织帮助代码?

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:26 25 4
gpt4 key购买 nike

如何在 Rails 中组织不同类型的帮助程序代码?或者,更一般地说,我是否应该只在特定模型/ View / Controller 的主文件之外查看帮助程序?

我的意思是:我加入了一个开发大型 Rails 应用程序的团队。据我所知,app/helpers 中的所有文件都是 View 助手,可以通过 add_template_helper(HelperName)helper 包含在 Controller 和邮件程序中:helper_name.

但想象一下这种情况 - 您想要将一个大邮件程序拆分成几个较小的邮件程序。在大型邮件程序中,您定义了几个辅助方法。现在您还想在新邮件程序中访问这些辅助方法。

你是怎么做到的?

你应该创建一个新的模块/文件,把它放在 app/helpers 下,然后通过 include HelperName 使用它,还是有其他约定?

我还没有偶然发现这一点,但我想可能还有一些模型助手,我想在多个模型之间共享,所以我也想知道如何组织它们。

编辑:阅读一些内容后,我意识到仅在 Controller 或邮件程序中包含一个方法会导致此方法成为 Controller /邮件程序操作的问题。所以我想这也是一个更普遍的 Ruby 问题——如何在多个类之间共享方法,同时保持这些方法的私有(private)性。如果类 A、B 和 C 必须具有方法 foo,我是在 A、B 和 C 的类定义中将其声明为私有(private)方法三次,还是可以在模块中定义它,将模块包含在类 A 中, B 和 C,但又要保密吗?

最佳答案

是的,您可以在模块中将方法设为私有(private),将模块包含在多个类中并在其中使用。在 Ruby 中,private 意味着该方法只能在没有接收者的情况下被调用。模块中的私有(private)方法可以由它所在的类中的实例方法调用,也可以由同一模块或同一类中的其他模块中的方法调用。

因此,模块是在 Rails 和 Ruby 中分解大型类和共享代码的好方法。

关于 Rails 代码组织,

  • “helper”特指包含在 View 中使用的方法的模块。助手住在 app/helpers 中。

  • Rails 4 有“关注点”,存在于 app/controllers/concerns 和 app/models/concerns 中。关注点只是一个模块,旨在包含在 Controller 或模型中,它扩展了 ActiveSupport::Concern(它处理模块设置中的一些常见模式)。

  • 如果出于某种原因您需要一个共享模块或类,而不是帮助程序或关注点,只需将它放在与使用它的类/模块相同的目录中,然后按您喜欢的方式使用它。

  • 如果您有一整类不适合现有 Rails 目录结构的类/模块(例如报告、用例 Controller 或外部服务外观),您可以在 app 下创建一个新目录,将其添加到 application.rb 中的 config.autoload_paths,并将您的新类/模块系列放在那里。

关于ruby-on-rails - 如何在 Rails 中组织帮助代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24086203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com