当前位置:  开发笔记 > 后端 > 正文

在Rails中指定复杂SQL查询的惯例是什么?

如何解决《在Rails中指定复杂SQL查询的惯例是什么?》经验,为你挑选了1个好方法。

我对Rails相当陌生,我很好奇一些专家在需要构建包含许多条件的非常复杂的SQL查询时正在使用的约定.具体来说,保持代码可读和可维护.

我可以想到几种方法:

单行,在调用find()时:

@pitchers = Pitcher.find(:all, "")

使用预定义的字符串并将其传递给:

@pitchers = Pitcher.find(:all, @conditions)

使用私有成员函数返回查询

@pitchers = Pitcher.find(:all, conditionfunction)

我更倾向于私有成员函数约定,另外因为您可以传入参数来自定义查询.

有什么想法吗?



1> nakajima..:

我几乎从不传递条件find.通常,这些条件对于以模型的形式named_scope甚至只是类方法添加到对象模型是有价值的.命名范围很好,因为你可以链接它们,这需要一点点复杂性.它们还允许您传递参数.

此外,您几乎不应该只传递原始SQL条件字符串.您应该使用散列样式(:conditions => { :name => 'Pat' })或数组样式(['name = ?', 'Pat']).这样,SQL就会被转义,为SQL注入攻击提供一些保护.

最后,我认为你正在考虑的方法,你试图在你正在调用的任何环境中创造条件的find方法是一种有缺陷的方法.模型的工作是提供一个接口,通过该接口返回相关的响应.find如果你问我,试图确定传入调用的条件太接近底层实现了.而且它更难测试.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有