【问题标题】:How add new folder with class in rails app?如何在rails应用程序中添加带有类的新文件夹?
【发布时间】:2014-12-11 22:29:21
【问题描述】:

我在 Rails 应用程序上下文中有 2 个问题:

我有一些不是“modele”的类,但在我的系统中需要,所以我想将它们分开

1)如何在 app/ 中添加“class”文件夹?(如果我创建并放置类,则不包括它们)

2)如何将文件夹“model”放在“app/class”文件夹中(这里也是一样,如果我移动它,模型不包括在内)

谢谢。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    有点不清楚你在问什么。

    但是如果你想自动加载其他目录,你可以通过在 config/application.rb 中放置类似的内容来实现

    config.autoload_paths << Rails.root.join('app/class')
    

    但请不要将您的目录称为class,而是使用描述性的名称。

    按照约定代码不适合模型、控制器、视图、帮助程序或关注点,并放置在项目根目录的 lib 目录中。


    编辑:

    您可以使用 glob 加载子目录:

    config.autoload_paths << Rails.root.join('app/classes/**/')
    

    【讨论】:

    • 此解决方案不起作用。它仅在我直接放置文件时才有效,但如果我想用子文件夹组织我的类,它们不包括在内(例如:“app/classes/effects/attribute.rb”和“class Effect::Attribute”)。如果我在新文件夹“类”中移动“模型”文件夹,同样的事情,找不到模型......
    • 好的,所以默认情况下,它不会在子文件夹上递归......奇怪。所以“**/”是很好的解决方案,谢谢!
    • 如何控制收录顺序?示例的初始化程序在模型之前调用,但是如果我将它们包含在此解决方案中以扩展 app_path,我该如何定义包含文件的顺序?
    • 我建议您仅使用 lib/ 文件夹的外部代码,例如服务和应用程序中的其他解耦模块/类。
    【解决方案2】:

    Rails 已经自动加载了 /app 下的所有路径,如 here 所述

    您在使用“app/class”目录时可能会遇到问题,因为“class”是保留字,而“Class”是 Ruby 中的一个类。

    你的例子有问题:

    示例:“app/classes/effects/attribute.rb”和“class Effect::Attribute”

    请注意,文件路径中的“effects”末尾有一个“s”,而您的模块名称没有“Effect::Atttribute”。那些应该匹配。两者都以“s”结尾,当它们匹配时,Rails 自动加载应该可以工作。

    您应该删除有关附加到 config.autoload_paths 的任何其他建议。

    【讨论】:

    • 你说得对,我虽然明确列出了models, controllers 等目录。
    • 我的消息中有一个错误,文件夹名为“classes”而不是“class”;)
    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多