【问题标题】:Helpers in rails铁轨上的助手
【发布时间】:2011-01-24 19:15:55
【问题描述】:

我刚刚开始使用 Rails,还有很多东西需要学习,所以我可能会比平时更频繁地使用 Stackoverflow 来询问初学者 Rails / Ruby 问题。

我只是想弄清楚 Helpers 在 Rails 中是如何工作的。从我目前看到的情况来看,Helper 旨在与视图一起使用,而不是与控制器一起使用。

但是我想创建一个简单的函数来验证参数中给出的用户输入(检查是否定义了某些参数,并可选择检查它们的值是否有效)。

谁能向我解释实现这一点的最佳方式是什么? (请记住,我希望在许多不同的控制器中使用它,因此它应该是全局可用的。)

我还注意到默认情况下 Rails 不会在主应用程序文件夹中生成 lib 文件夹。开发人员是否将他们的库放在主文件夹中的 app 文件夹之外,或者 Rails 使用库的方式不同?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    关于您的验证问题,这取决于您要验证的内容。

    如果数据构成来自您的问题域的对象,也称为模型,那么您应该使用 ActiveModel 的内置验证器。这可能是您应该做的,但是如果不知道确切的问题就很难说。请参阅Rails Guides on Validations。您可以通过询问自己是否需要验证的数据将在您获取后存储它来判断是否是这种情况。如果是这样,它绝对是一个模型。此类数据的一个示例是从浏览器表单发送到 Rails 的博客文章的标题和文本字段。

    如果数据是模型的第三类数据或特定于表示的数据,那么使用助手应该没问题。您注意到帮助器主要在视图中使用,尽管这是真的,但没有什么能阻止您在控制器中使用它们,您只需声明您将使用 ActiveController#helper 方法使用它们。在ApplicationController 类中,许多开发人员会将helper :all 仅包含所有控制器中的所有助手。一旦需要代码一次,它就不会真正对性能造成太大影响。

    请注意,几乎所有传入数据都可以使用模型进行建模。 Rails 世界中的一个大学派赞同 Fat Model 的想法。人们说,在模型中放尽可能多的代码,在控制器中放尽可能少的代码可以正确分离关注点,并导致代码更易于维护。这表明即使您不认为传入的数据是可建模的(从某种意义上说,您可以创建一个模型来表示它),您也应该尝试将其设为模型并封装验证它的逻辑。但是,您可能会发现创建辅助函数更快,并且任何一个都可以。

    您验证用户输入的想法很好。我感觉你是 Rails 的新手,你习惯于自己做这些事情,但这并不适用于此。在 Rails 世界中,很多常见的东西,比如验证,都是由框架处理的。您不必检查params 数组中是否存在,而是在模型上调用validates_presence_of 并让Rails 将错误吐给用户。从长远来看,如果你让框架按照它的设计目的去做,事情就会变得更容易。

    关于您关于lib 文件夹的问题,这并不重要。您可以将其他支持文件和库放在根目录的lib 文件夹中,它们将可在您的应用程序中使用(app 文件夹中的文件)。您还可以选择将您的代码抽象为插件或 gem 并以这种方式包含它,很多人都选择这样做。我对此的建议是在深入研究之前阅读宝石和插件的概念。

    【讨论】:

    • 感谢hornais,非常有用的解释!你是对的,我习惯于自己做很多这些事情,而不是让框架做常见的事情。 Rails 为你做这件事是有道理的,我只需要习惯它。我将尝试在模型级别验证输入。
    【解决方案2】:

    您想要的可能是自定义验证器(在 Rails3 中):

    http://railscasts.com/episodes/211-validations-in-rails-3

    您可以将库添加到您创建的lib 文件夹中,也可以将它们添加到您添加的文件中的config/initializersinitializers 目录中的文件由 Rails 自动加载。

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 2011-12-06
      • 2016-09-25
      • 2013-08-31
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多