铁轨的助手

我刚刚开始使用Rails,而且还有很多东西我还需要学习,所以我很可能比普通的Rails / Ruby问题更频繁地使用Stackoverflow。

我只想弄清楚Helpers如何在Rails中工作。 从我到目前为止看到的,Helpers旨在与Views一起使用,而不是与控制器一起使用。

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

任何人都可以向我解释一下实现这个的最佳方法是什么? (请记住,我将在许多不同的控制器中使用它,因此它应该是全局可用的。)

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

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

如果数据构成问题域中的对象(也称为模型),则应使用ActiveModel中的内置validation器。 这可能是你应该做的,但在不知道确切问题的情况下很难说。 请参阅Rails指南validation 。 您可以通过询问自己是否需要validation的数据在获得之后存储来判断是否存在这种情况。 如果是这样,它绝对是一个模特。 这种数据的一个示例是从浏览器表单发送到Rails的博客文章的标题和文本字段。

如果数据是您的模型的第三级数据,或特定于演示文稿的数据,那么您应该使用帮助程序。 您注意到帮助程序主要在视图中使用,虽然这是真的,但是没有什么可以阻止您在控制器中使用它们,您只需声明您将使用ActiveController#helper方法来使用它们。 在ApplicationController类中,很多开发人员会放置helper :all只包括所有控制器中的所有帮助程序。 一旦代码被要求一次,它实际上不会产生如此大的性能损失。

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

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

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

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

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

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