铁轨的助手

时间:2011-01-24 19:15:55

标签: ruby-on-rails

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

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

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

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

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

2 个答案:

答案 0 :(得分:20)

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

如果数据构成问题域中的对象(也称为模型),则应使用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,并以这种方式包含它,很多人都选择这样做。我的建议是在潜入之前阅读宝石和插件的概念。

答案 1 :(得分:1)

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

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

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