在哪里放置不是模型、视图、控制器或助手的 Rails 代码?

Posted

技术标签:

【中文标题】在哪里放置不是模型、视图、控制器或助手的 Rails 代码?【英文标题】:Where to place Rails code that is not a model, view, controller or helper? 【发布时间】:2010-11-13 18:17:13 【问题描述】:

我想在我的 Rails 应用程序中的多个控制器之间共享与视图无关的代码。我应该把它放在目录结构的什么地方?

编辑:有问题的代码是否所有控制器都使用某些东西来确定如何他们呈现模型数据

【问题讨论】:

它也与数据库实体无关(因此与模型代码无关) 模型不需要与数据库相关。它们只代表系统使用的数据,无论是否存储。 这是什么?你只说明它不是什么,而不是它是什么。 【参考方案1】:

如果代码类似于带有实用方法的模块,则可以将其放在lib 文件夹中。或者,如果它们共享行为,您可以为某些控制器创建一个公共超类。

请发布您正在考虑的代码类型的示例。

【讨论】:

【参考方案2】:

如果它是“所有控制器都使用的东西”,我会将它放在所有控制器使用的基类中。想到了“application_controller”。

【讨论】:

【参考方案3】:

我一直在 lib 中创建模块以向其他类提供代码。

这是一个简短的示例模块,它定义了可以从不同控制器实例化的视图的值。

module ControllerDefaultValues
  def default_value_for_some_controller()
    @controller_name = "some_controller"
  end
end

要使用它,只需将模块包含在您的类中:

class SearchesController
  include ControllerDefaultValues
  #
  def search_some_controller
    default_value_for_some_controller()
    render(:partial => "search_results")
  end
end

这种方法的主要好处是它使您的控制器目录专注于控制器,而您的模型目录专注于逻辑。

【讨论】:

【参考方案4】:

我个人认为它很好,如果它的控制器相关将它放在你的控制器目录中,但是,标记为一个模块,例如app/controllers/what_am_i_module.rb,因为它特定于开发中的应用程序。

lib 对我来说似乎是一个放置框架/核心增强功能或非特定于应用程序的猴子补丁的地方。

【讨论】:

【参考方案5】:

如果要被所有控制器使用,请将其粘贴在 application_controller.rb 中

您的所有控制器都继承自 ApplicationController,因此它们都可以访问它们。

【讨论】:

以上是关于在哪里放置不是模型、视图、控制器或助手的 Rails 代码?的主要内容,如果未能解决你的问题,请参考以下文章

模型助手在 React/Flux 中属于哪里?

性能优化-使用 RAIL 模型评估性能

在哪里放置根控制器?

Rails 在哪里放置诸如 ini 文件之类的配置?

Ruby on Rails 中一个共享视图的两个控制器

如何在控制器或视图之外使用 Zend Framework 部分视图助手?