加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Rails中指定复杂SQL查询的惯例是什么?

发布时间:2020-12-17 03:25:39 所属栏目:百科 来源:网络整理
导读:我对Rails相当陌生,我很好奇一些专家在需要构建包含许多条件的非常复杂的SQL查询时正在使用的约定.具体来说,保持代码可读和可维护. 我可以想到几种方法: 单行,在调用find()时: @pitchers = Pitcher.find(:all,"conditions") 使用预定义的字符串并将其传递
我对Rails相当陌生,我很好奇一些专家在需要构建包含许多条件的非常复杂的SQL查询时正在使用的约定.具体来说,保持代码可读和可维护.

我可以想到几种方法:

单行,在调用find()时:

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

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

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

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

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

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

有什么想法吗?

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读