【问题标题】:Where do I put my class files which are neither model, view nor controller?我在哪里放置既不是模型、视图也不是控制器的类文件?
【发布时间】:2015-12-25 23:48:51
【问题描述】:

我有一个 Rails 应用程序。对于我的一个模型,我创建了一个特定的类,除了这个特定的模型之外,它可能永远不会在其他任何地方使用。

这个类对应的文件及其对应的测试文件应该放在哪里?

我目前将它放在 /lib 中,但由于它永远不会在其他地方使用,我认为这不是它的正确位置。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2


    【解决方案1】:

    我认为这个问题没有绝对正确的答案,因为课程可以放置在几个不同的位置,所有这些位置都可以用于程序,这更多的是组织偏好问题。

    tl;dr lib 很好。

    选项:

    1. 模型目录
      • 如果该类与程序域相关,则将其放在这里可能是有意义的。您甚至可以为其命名并将其放在一个目录中,以将其从主目录中取出并根据其功能对其进行组织。
      • app/models/user/password.rb 为User::Password
    2. lib 目录
      • 如果类与程序域正交,lib 可能是正确的位置。如果它阻塞了您的模型目录,则特定领域的内容也可能会出现在这里。
      • lib/soap_client.rb
    3. 在使用它的模型的文件中
      • 可能不是最佳选择,因为它隐藏了类的存在(如果您正在查看目录结构)
      • 可能需要自定义 Exception 类之类的东西?

    【讨论】:

    • 在选项 1 中,我是否必须更改我的 autoload_paths?
    • 不,我相信它应该在那里加载所有内容。不过只有一种方法可以找出答案:)
    • @PierreMichard 不,正如@jstim 所说,Rails 将自动加载 app/ 目录下的所有内容。您甚至可以拥有自己的子目录,例如app/decorators,将包括在内。
    【解决方案2】:

    正如@jstim 所说,没有具体的方法。

    但您可以为此使用演示者或装饰

    在 app 目录中创建一个文件夹作为演示者或装饰者。

    创建一个文件some_file.eb 在此您可以创建该类并在您想要的任何控制器中使用它。

    app/presenters/some_file.eb

    class ClassName
      def your_method
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 2011-05-28
      • 2015-03-15
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多