2011-01-24 44 views
11

我刚刚开始使用Rails,还有很多我仍然需要学习,所以我很可能比正常人更习惯于使用Stackoverflow来询问初学者的Rails/Ruby问题。助手在rails中的使用

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

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

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

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

回答

20

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

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

如果数据对于您的模型来说是第三级的,或者对于演示文稿而言是特定的,那么您应该很好地使用助手。你注意到助手主要用在视图中,虽然这是真的,但是没有任何东西阻止你在控制器中使用它们,你只需要声明你将使用ActiveController#helper方法。在ApplicationController课程中,很多开发人员会将helper :all仅包含所有控制器中的所有帮助程序。一旦代码被需要一次,它不会真的招致大的性能影响。

请注意,几乎所有传入的数据都可以使用模型建模。 Rails世界中的一大派思想赞同胖模式的想法。人们说,尽可能在模型中放置尽可能多的代码,尽可能少地在控制器中尽可能分离问题,并导致更易维护的代码。这表明,即使您不认为传入数据是可模式化的(就您可以创建模型来表示它而言),您应该尝试使其成为模型并在验证它的过程中封装逻辑。但是,您可能会发现制作辅助函数的速度更快,而且两者都可以工作。

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

关于您对lib文件夹的疑问,这并不重要。您可以将其他支持文件和库放在根目录中的lib文件夹中,并且它们将可用于您的应用程序(app文件夹中的文件)。您也可以选择将您的代码抽象为插件或宝石,并将其包含在内,这是很多人选择做的。我的建议是在深入了解宝石和插件的概念之前。

+0

感谢hornais,非常有用的解释!你是对的,我习惯于自己做很多这些事情,而不是让框架做一些常见的事情。它是有道理的,铁轨为你做这个,我只需要适应它。我会尝试在模型级别验证输入。 – Naatan

1

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

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

您可以添加库中创建一个文件夹lib,或者他们你添加一个文件添加到config/initializers。 Rails会自动加载initializers目录中的文件。