在 Rails 中处理视图和仅帮助程序常量的最佳方法

Posted

技术标签:

【中文标题】在 Rails 中处理视图和仅帮助程序常量的最佳方法【英文标题】:Best way to handle view and helper-only constants in Rails 【发布时间】:2011-01-17 04:42:12 【问题描述】:

我有一个仅在视图中使用的常量,但它在不同的地方以不同的方式使用。它是一个选项名称数组,用于选择框,但我也在其他视图中使用它来查看是否在此数组中找到字符串,并做出相应的响应。

处理此问题以保持干燥的最佳方法是什么?

我最初在帮助程序中创建了一个常量,但在视图中似乎无法访问。

我已经切换到在帮助程序中创建一个方法,除了返回常量之外什么都不做。然而,这似乎真的违背了 Rails 的精神,因为现在基本上我使用的是小写常量。

我当然可以将它贴在模型中,但它与任何模型都无关。

【问题讨论】:

【参考方案1】:

您可以在帮助程序中定义常量,但您需要在视图中通过它们的完全限定名称来引用它们。

application_helper.rb

module ApplicationHelper
  MyConstant = "something"
end

在任何视图中:

<%= ApplicationHelper::MyConstant %>

【讨论】:

在控制器/模型中,您可以使用include ApplicationHelper,以避免键入它。但是,您不能在视图中执行此操作,对吗? :// 事实证明,您在控制器中include 的任何模块都可用于视图。 你也可以在助手中写一个方法来引用它,这样你就不必在视图中重复助手名称了。【参考方案2】:

把它放在config/initializers/constants.rb 中,它就会随处可用。

【讨论】:

添加一个全局常量似乎有点不幸,因为它只会在视图和帮助器中使用,我不确定这是否比仅使用方法为其别名更好。 仅供参考 - 在 rails 4 生产模式中不再是这种情况 - 模板位于不同的命名空间中,需要通过 ApplicationController:CONSTANT_NAME 访问常量

以上是关于在 Rails 中处理视图和仅帮助程序常量的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Rails:将逻辑移出视图

在 Rails 应用程序中处理大文件上传的最佳方法是啥?

使用 Postmarkapp 在 Rails 应用程序中处理电子邮件异常的最佳方法是啥?

处理 Rails 中 STI 子类的路由的最佳实践

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

在 Rails 中验证多封电子邮件和处理错误的最佳方法是啥?